我有兩個模板參數制約功能模板參數對某些類型的
template<class X, class Y>
bool fun(X x, Y y) { ... }
我需要第二個參數限制對以下兩種情況下的函數:int y
或vector<int> const& y
。如果我嘗試static_assert
:
static_assert(std::is_same<int, Y>::value ||
std::is_same<std::vector<int> const&, Y>::value,
"unsupported Y class");
那麼下面不會因爲Y被推斷爲vector<int>
而不是vector<int> const&
編譯
X x;
std::vector<int> y;
fun(x, y);
。
有沒有辦法按我想要的方式限制Y?
PS:當然,我可以撥打fun<X, vector<int> const&>(x, y)
但我希望自動類型扣除工作。或者我可以複製和粘貼並分別具有兩個功能,但它是一個具有相同主體的長功能,我一直在更改,所以我不喜歡同步兩個副本。