2
我複製了以下Stackoverflow中的一個成員的代碼片段。它運作良好。多謝你們!如何使用enable_if設置以下C++代碼的返回類型
但是,我想不通哪裏是定義的返回值。任何人都可以向我解釋什麼是返回值的類型?
如果我想將返回值類型更改爲void(無返回值),該怎麼辦?
另外,在這段代碼中有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'變量阻止用戶使用自定義模板參數調用該函數,強制'U'始終默認爲「特質」。我想不出爲什麼這將是必要的,而不是直接將'Traits'直接插入'is_base_of' – smead