我知道這個代碼看起來很奇怪,但我想知道是否有任何方法可以使它編譯。使用is作爲模板類型參數時,可以訪問類字段嗎?
template<typename T>
class A
{
public:
enum
{
template_class_id = T::class_id
};
};
class B : public A<B>
{
public:
enum
{
class_id = 0x1234
};
};
而且我得到這樣的錯誤:
clang++ test.cpp
test.cpp:7:32: error: no member named 'class_id' in 'B'
template_class_id = T::class_id
~~~^
test.cpp:11:18: note: in instantiation of template class 'A<B>' requested here
class B : public A<B>
^
1 error generated.
你的第二種方法似乎可用。 – jayatubi
經過大量測試後,我發現template_class_id只有在對類A的聲明「不在」類的聲明時纔可用。我不能在類A的聲明中使用它,例如在類A中定義一個枚舉與template_class_id的值。 – jayatubi
@jayatubi當然,這是因爲odr-using'template_class_id'會導致它被實例化。你想用它做什麼? – TartanLlama