この質問は私の最後の質問に関連しています。traits<T>
と を使用して問題を解決しようとしてい traits<T*>
ます。次のコードを検討してください。
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()
asとしているようです。ここで何が間違っていますか?const foo
const foo*
どんな助けでも素晴らしいでしょう!