template <int>
class CAT
{};
int main()
{
int i=10;
CAT<(const int)i> cat;
return 0; //here I got error: ‘i’ cannot appear in a constant-expression
}
дажеполучил «не может появиться в постоянной экспрессии» при использовании шаблону
int i=10;
const int j=i;
CAT<j> cat; //this still can not work
но я преобразовать я на константные Int, почему компилятор до сих пор сообщают об ошибке?
моя платформа Ubuntu, GCC версии 4.4.3
Спасибо,
==============
Спасибо всем за ваш вклад, но в некоторых случаях , мне нужно неконстантную переменную,
, например:
//alloperations.h
enum OPERATIONS
{
GETPAGE_FROM_WEBSITE1,
GETPAGE_FROM_WEBSITE2,
....
};
template< OPERATIONS op >
class CHandlerPara
{
static string parameters1;
static string parameters2;
....
static void resultHandler();
};
//for different operations,we need a different parameter, to achieve this
//we specified parameters inside CHandler, for example
template<>
string CHandlerPara<GETPAGE_FROM_WEBSITE1>::parameters1("&userid=?&info=?..")
template<>
string CHandlerPara<GETPAGE_FROM_WEBSITE1>::parameters2("...")
другой модуль, используя этот шаблон, чтобы получить соответствующий параметр
и, возможно, специфицировать функцию результатаHandler для специального поведения
Помните: много раз, когда вы получаете ошибки на одной строке, это много раз выше. Как показывает ответ Джеймса. – 2010-10-21 04:57:22
Просто потому, что тип const не означает, что его значение есть. – GManNickG
Повторяю: просто потому, что тип const не означает, что это значение. Вы можете сказать: 'f (rand());' или 'int i = rand()'. Просто притворство const на типе не означает вещь. – GManNickG