2016-03-05 103 views
0

請我想如何使用非類型模板參數指向對象完整的例子,我想這個代碼,但它包含了很多錯誤的非類型模板參數指針對象

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,字符* P> 類X { // *** X(); X(const char * q) { /**/ } }; X x1; // error:string literal as template-argument char p [] =「Vivisectionist」; X x2; // OK' – abdulrhmanOmran

+0

該示例代碼將所有變量聲明爲* global *變量,並且在編譯時將全局變量放入特定位置和位置,因此可用作模板參數。 –

回答

0

模板參數是在編譯時進行評估以實例化一個模板,但&foo的值只在運行時才知道。那是你的問題。

也許你應該使用不同的架構。也許你可以通過Foo*作爲你的構造函數的非模板參數。 (我甚至無法想象一個目的,作爲模板參數的指針可能會有用)。