Stackoverflowのメンバーの1つから次のコードをコピーしました。それはうまくいく。みんなありがとう!enable_ifで次のC++コードの戻り値の型を設定する方法
しかし、私はどこで戻り値が定義されているか把握できませんでした。帰りの値の型は何ですか?
戻り値の型を無効(戻り値なし)に変更する場合はどうすればよいですか?
また、コードのこの部分にtypename Dummyがあるのは何ですか?なぜ '...'があるのですか?
誰でも説明できますか?ありがとう!
template<typename Traits>
class Robot {
public:
template<typename... Dummy, typename U = Traits>
typename std::enable_if<std::is_base_of<ResearchTraits, U>::value>::type
MyFunction() {
static_assert(sizeof...(Dummy) == 0, "Do not specify template arguments!");
std::cout << "research based." << std::endl;
}
template<typename... Dummy, typename U = Traits>
typename std::enable_if<std::is_base_of<ProductionTraits, U>::value>::type
MyFunction() {
static_assert(sizeof...(Dummy) == 0, "Do not specify template arguments!");
std::cout << "production based." << std::endl;
}
};
これは、使用するメンバー機能を「選択」する通常の方法ですか?またはそのような選択のための専用の構文がありますか? MyFunctionの戻り値の型は常に無効なので、何も選択する必要はありません。 – user152503
これは、 'Robot'のテンプレートパラメータが' ProductionTraits'か 'ResearchTraits'かどうかによって異なる関数オーバーロードを指定する方法です。私はそれが何か他のこともしているのかどうかは完全には分かっていないので、私はその質問をもう少し知識のある人に任せておきます – smead
'Dummy'変数は、ユーザがカスタムテンプレートパラメータでその関数を呼び出し、常に 'Traits'をデフォルトにします。私は 'Traits'を' is_base_of'に直接接続するのではなく、なぜこれが必要なのか考えることはできません – smead