根据this问题,我尝试了is_vector
特征:
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
struct is_vector {
constexpr static bool value = false;
};
template<typename T>
struct is_vector<std::vector<T>> {
constexpr static bool value = true;
};
int main() {
int A;
vector<int> B;
cout << "A: " << is_vector<decltype(A)>::value << endl;
cout << "B: " << is_vector<decltype(B)>::value << endl;
return 0;
}
输出:
A: 0
B: 1
这可以按预期工作。但是,当我尝试将其放在一个小辅助函数中时,is_vector
会为false
返回B
:
template<typename T>
constexpr bool isVector(const T& t) {
return is_vector<decltype(t)>::value;
}
...
cout << "B: " << isVector(B) << endl; // Expected ouptput: "B: 1"
输出:
B: 0
我在这里缺少什么?
答案 0 :(得分:6)
此处的问题是t
是const std::vector<int>&
,与struct is_vector<std::vector<T>>
不匹配。您在函数中真正想要的是使用T
,它被推导为std::vector<T>
,它可以正常工作。做到这一点
template<typename T>
constexpr bool isVector(const T& t) {
return is_vector<T>::value;
}