1
私は2つのテンプレートで定義されたクラスを持っています。他のテンプレートに基づいて、テンプレートクラスからプリミティブ型への暗黙的な変換を定義します。
template<typename A, typename B> my_class {
private:
A value;
public:
operator A() {
return this->value;
}
};
クラスとテンプレートの最初の型の間の暗黙の変換を定義したいが、テンプレート上の特定の第2の型に対してのみ変換を定義したい。 A
はC++プリミティブ型なので、私はその側で変換を定義することはできません。私はこの
operator typename std::enable_if<std::is_same<B, specific_B_type>::value, NumT>::type() {
return this->value;
}
ようstd::enable_if
を試してみましたが、私はコンパイルエラー
Error C2833 'operator type' is not a recognized operator or type dimensional_analysis
B = specific_B_type
に特化し、クラス全体を定義することなくこれを行うにはどのような方法がありますを取得しますか?
残念ながら、私の答えは実際には機能しないことが判明しました。これは、オペレータだけでなくクラス全体のインスタンス化を無効にしているようです...それを受け入れることができないので削除できますか? :) – Knoep
別の(はるかに単純な)解決策を見つけました。それはあなたが欲しいものですか? – Knoep
私は現在、 'template :: value、void> :: type>'という最初のソリューションを使用しています。それは動作するようですが、私はそれを十分にテストしていないかもしれません。あなたの最高の解決策は何ですか?前もって感謝します! –
mbtg