を削除私は現在のテンプレートに苦しんでいます:私は今、私が使用できる基本的な数学を行い、テンプレートクラスA
を、持っている(フロートのために、複雑な数字を倍)、このが冗長テンプレートタイプ
template <typename T>
class A
{
public:
void foo(std::vector<std::complex<T>>& result);
};
のように見えますクラスA<double>, A<float>
のように、私もA<std::complex<float>>
とA<std::complex<double>>
のようにそれを使用したいと思います。後者を使用する場合、私はここで私ができる、foo
の定義はstd::complex<T>
例のための特定のテンプレートを作成する方法はあり
void foo(std::vector<std::complex<std::complex<float>>>& result);
が好き
void foo(std::vector<std::complex<float>>& result);
ないように見えるしたいと思います「内部」型にアクセスしますか?またはこれは可能ではありません/悪い練習ですか? この問題を解決する最も洗練された方法は何ですか?
これらの2つの方法は同じですか、またはこれを行うには好ましい方法の1つですか? – FlashTek
@FlashTek - 彼らは本当に異なっています。このようにして、利点になる特殊化を作成することを避けることができます。他の理由で専門化が必要な場合もあります。このおもちゃの例では、私はそれが型特有の方法で好まれていると思います。あなたの本当の(私はより複雑な)必要性のために、専門化の方法が望ましいかもしれません。あなただけがあなたの質問に答えて答えることができます。 – max66
@FlashTek 'foo'の署名だけを変更したいのであれば、これは簡単です。パーシャルスペシャライゼーションでは、より多くのものをカスタマイズできますが、依頼したとおり、複製されたコードをプライマリテンプレートと部分スペシャリゼーションの間で処理する必要があります。 – songyuanyao