0
我已經模板結構聲明:C++模板棘手的偏特常量+模板成員
template <bool sel_c>
struct A
{
A(){/*...*/}
enum{
is_straight = sel_c
};
typedef A<sel_c> this_t;
typedef A<!sel_c> oposit_t;
A(const this_t& copy){/*...*/}
A(const oposit_t& copy){/*...*/}
~A(); //will be specialized latter for true/false
template <class T> //this is my pain !
void print(T& t);
};
我怎麼能同時聲明print
方法的特例?
我已經嘗試以下(含錯誤:錯誤C2244:「A ::打印」:無法定義的功能匹配到現有的聲明)
template <class T>
void A<false>::print(T& t)
{
/*...*/
}
和之後(有錯誤,沒有副本上述早聲明的構造):
template <> struct A<false>
{
~A()
{
/*...*/
}
template <class T>
void print(T& t)
{
/*...*/
}
};
至少我的G ++(GCC)有關錯誤4.5.3報告,我已經沒有聲明拷貝構造函數代碼'一個(A ( )) - 發生這種情況是因爲完全重新聲明瞭整個類,它刪除了以前關於有效構造函數的信息 –
Dewfy
有趣的是,我使用了g ++ 4.6.3,但我認爲這不會產生任何影響 – dkrikun
只是添加到源代碼中代碼行:'A a; A a2(a); A b(a);'這會強制編譯器查找在沒有這些行時被忽略的構造函數 –
Dewfy