0

これは、この (より一般的な) 質問:前の質問のフォローアップです。現在の質問に対する部分的な回答がここに示されています: 現在の質問に対する部分的な回答.

テンプレート引数に基づく戻り値の型の明示的な特殊化に興味があります。上記の回答は問題の解決策を提供しますが、C++11/14 手法を使用して問題を解決するより洗練された方法があると思います。

template<int N> auto getOutputPort2();
template<> auto getOutputPort2<0>();
template<> auto getOutputPort2<1>();

template<>
auto getOutputPort2<0>()
{
    return std::unique_ptr<int>(new int(10));
}

template<>
auto getOutputPort2<1>()
{
    return std::unique_ptr<string>(new string("asdf"));
}

上記のコードは、gcc 4.8.3 (-std=c++0x フラグ付き) を使用してコンパイルし、期待どおりに動作します。ただし、次の警告が発行されます。

getOutputPort2関数はauto、末尾の戻り値の型なしで型指定子を使用します。

私の理解では、これは C++14 標準の一部になります。しかし、上記の機能を C++11 で実装する方法はありますか? decltypeここで使える?


編集。以下のコメントに続いて、追加の質問もしたいと思います。上記のコードは、C++14 標準の観点から有効ですか? そうでない場合、なぜですか?

4

1 に答える 1