我有一個模板功能,並在一個點上,我想這取決於模板參數有不同的代碼:分支函數中的模板參數?
template <typename T>
void function(const T ¶m) {
// generic code here...
// pseudo-code:
if constexpr isinstance(param, Banana) {
param.peel();
} else if constexpr isinstance(param, Apple) {
// do nothing, Apple has no method `peel`
}
}
我不想專門整體功能,因爲大部分代碼共享。我想插入的語句是一個臨時調試措施。我知道正確的做法是創建一個重載函數doPeel
而改爲調用:
void doPeel(const Banana ¶m) { param.peel(); }
void doPeel(const Apple ¶m) {}
但我很好奇,有沒有辦法告訴在編譯時,在一個函數,什麼(模板特)鍵入一個給定的變量是...爲了使用只能編譯一種類型的語句?
我不知道constexpr
之類的東西是否可能 - 或者編譯器是否在丟棄的分支中執行類型?我也嘗試用lambda表達式來定義lambda表達式 - 爲兩種情況定義lambda表達式,並且只調用一個lambda表達式,但是我找不到辦法做到這一點。有任何想法嗎?
嗯我想它會花費比C + + 11最小的變化更多,因爲你依靠通用lambdas推遲解析的lambda身體,不是? –
@LightnessRacesinOrbit這是真的,我沒有想到通過 – krzaq