2016-03-05 3 views
0

Пожалуйста, я хочу полный пример того, как использовать не тип указатель параметров шаблона объект, я попробовал этот код, но он содержит много ошибокшаблона Non-типа параметров указателя на объект

class Foo 
{ 
    public: 
     Foo() 
     { 

     } 
}; 

template<typename T,Foo* foo> 
class TFoo 
{ 
public: 
    TFoo() 
    { 

    } 
}; 
int main() 
{ 
    Foo foo; 
    TFoo<float,&foo> tfoo; 
} 
+0

Локальные (нестатические) переменные на самом деле не имеют фиксированного места в памяти во время компиляции, что означает, что указатель на локальную переменную (например, 'foo' в вашем примере) не является выражением константы времени компиляции который необходим для создания шаблона. –

+0

@JoachimPileborg, спасибо, я просто хочу знать, что следующий код в стандартном n1905 означает: 'шаблон <класс T, символ * р> класса X { // *** X(); X (const char * q) { /**/} }; X x1; // error: строковый литерал как шаблон-аргумент char p [] = "Vivisectionist"; X x2; // OK' – abdulrhmanOmran

+0

Этот примерный код объявляет все переменные как * глобальные * переменные, а глобальные переменные помещаются в определенное место и местоположение во время компиляции и поэтому могут использоваться в качестве аргументов шаблона. –

ответ

0

параметров шаблона являются быть оценены во время компиляции, чтобы создать экземпляр шаблона, но значение &foo известно только во время выполнения. Это твоя проблема.

Возможно, вы должны использовать другую архитектуру. Может быть, вы можете передать Foo* в качестве параметра без шаблона в свой конструктор. (Я даже не могу представить себе цель, для которой полезен указатель как параметр шаблона).

Смежные вопросы