Mak*_*gan 4 c++ arrays generics templates types
假设我们有:
template <typename T>
void foo(std::vector<T> &t) {
auto var = T();
std::vector<decltype(var.Get())> array;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,创建了一个数组。该数组的类型是Get()的返回值是什么。通过创建类型T的虚拟变量,然后使用decltype推断Get的返回类型,可以找到此值。
这是可行的,但是它需要创建一个无用的伪变量。
相反,我们可以这样做:
template <typename T>
void foo(std::vector<T> &t) {
auto var = t[0];
std::vector<decltype(var.Get())> array;
}
Run Code Online (Sandbox Code Playgroud)
不会创建任何虚拟变量,但是鉴于我们不能保证数组至少包含on元素,这可能会崩溃。
有没有一种方法可以推断.Get()的类型而不创建虚拟对象?
Vit*_*meo 10
std::vector<decltype(t[0].Get())>
Run Code Online (Sandbox Code Playgroud)
t[0]不会像decltype未评估的上下文一样被调用。
备择方案:
std::vector<decltype(T().Get())>
std::vector<decltype(std::declval<T&>().Get())>
Run Code Online (Sandbox Code Playgroud)