subj.
желательно со ссылками на стандарт (;
template<typename T>
struct A
{
static const int SZ;
char r[SZ];
};
int main()
{
A<int> i;
A<char> c;
}
const int A<int>::SZ=1;
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Здравствуйте, Senyai, Вы писали:
S>subj.
S>желательно со ссылками на стандарт (;
S>S>template<typename T>
S>struct A
S> {
S> static const int SZ;
S> char r[SZ];
S> };
S>int main()
S> {
S> A<int> i;
S> A<char> c;
S> }
S>const int A<int>::SZ=1;
S>
Intel C++ пишет: main.cpp(11): error: constant value is not known.
Собственно, значение SZ не известно, поэтому компилятор и не может сгенерировать код. Решается следующим образом:
static const int SZ=100;
Здравствуйте, sch, Вы писали:
sch>Intel C++ пишет: main.cpp(11): error: constant value is not known.
sch>Собственно, значение SZ не известно, поэтому компилятор и не может сгенерировать код. Решается следующим образом:
sch>sch>static const int SZ=100;
sch>
вообще-то было написано
S>>S>>const int A<int>::SZ=1;
S>>
и имелось в виду, что в зависимости от T SZ может принимать разные значения
Здравствуйте, Senyai, Вы писали:
S>subj.
S>желательно со ссылками на стандарт (;
S>S>template<typename T>
S>struct A
S> {
S> static const int SZ;
S> char r[SZ];
S> };
S>int main()
S> {
S> A<int> i;
S> A<char> c;
S> }
S>const int A<int>::SZ=1;
S>
Правильный синтаксис определения статических данных-членов шаблона такой
// общее определение
template<typename T>
const int A<T>::SZ=2;
// специализция для int
template<>
const int A<int>::SZ=1;
Размер массива должен являться integral constant expression. Статические данные-члены могут входить в integral constant expression
внутри определения класса только если они инициализированы при объявлении (9.4.2/4).
template<typename T>
struct A
{
static const int SZ = 25;
char r[SZ];
};
Если хочется варьировать значение SZ в зависимости от типа, не специализируя struct A, можно использовать traits
template<typename T>
struct A_traits
{
static const int SZ = 2;
};
template<>
struct A_traits<int>
{
static const int SZ = 1;
};
template<typename T>
struct A
{
static const int SZ = A_traits<T>::SZ;
char r[SZ];
};
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Костя Ещенко, огромное спасибо за ответ. Откуда Вы это всё знаете, подскажите plz.
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Senyai wrote:
> Костя Ещенко, огромное спасибо за ответ. Откуда Вы это всё знаете, подскажите plz.
Нахватался помаленьку

Теперь и Вы это все знаете

Posted via RSDN NNTP Server 1.9
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн