這個問題與我最後的one有關。我正在嘗試使用traits<T>
和traits<T*>
解決問題。請考慮下面的代碼。在C++中使用特徵
template<typename T>
struct traits
{
typedef const T& const_reference;
};
template<typename T>
struct traits<T*>
{
typedef const T const_reference;
};
template<typename T>
class test
{
public:
typedef typename traits<T>::const_reference const_reference;
test() {}
const_reference value() const {
return f;
}
private:
T f;
};
int main()
{
const test<foo*> t;
const foo* f = t.value(); // error here. cannot convert ‘const foo’ to ‘const foo*’ in initialization
return 0;
}
所以它看起來像編譯器不考慮指針性狀專業化和服用value()
返回類型爲const foo
,而不是const foo*
。我在這裏做錯了什麼?
任何幫助將是偉大的!
我覺得dump :(但是,T本身就是一個指針('foo *')。所以指定'T *'會導致'T **'? – 2010-02-21 04:48:56
不。在'traits'專精中,T '不是指針,'T *'是一個指針,你使用相同的typename參數是不重要的。 –
outis
2010-02-21 04:51:39
好的,謝謝。 – 2010-02-21 04:54:59