Пожалуйста, я хочу полный пример того, как использовать не тип указатель параметров шаблона объект, я попробовал этот код, но он содержит много ошибокшаблона Non-типа параметров указателя на объект
class Foo
{
public:
Foo()
{
}
};
template<typename T,Foo* foo>
class TFoo
{
public:
TFoo()
{
}
};
int main()
{
Foo foo;
TFoo<float,&foo> tfoo;
}
Локальные (нестатические) переменные на самом деле не имеют фиксированного места в памяти во время компиляции, что означает, что указатель на локальную переменную (например, 'foo' в вашем примере) не является выражением константы времени компиляции который необходим для создания шаблона. –
@JoachimPileborg, спасибо, я просто хочу знать, что следующий код в стандартном n1905 означает: 'шаблон <класс T, символ * р> класса X { // *** X(); X (const char * q) { /**/} }; X x1; // error: строковый литерал как шаблон-аргумент char p [] = "Vivisectionist"; X x2; // OK' –
abdulrhmanOmran
Этот примерный код объявляет все переменные как * глобальные * переменные, а глобальные переменные помещаются в определенное место и местоположение во время компиляции и поэтому могут использоваться в качестве аргументов шаблона. –