假设我们有:
template <typename T>
void foo(std::vector<T> &t) {
auto var = T();
std::vector<decltype(var.Get())> array;
}
在上面的代码中,创建了一个数组。该数组的类型是 Get() 的返回值。我们通过创建类型 T 的虚拟变量然后使用 decltype 推断 Get 的返回类型来找到该值。
这可行,但是它需要创建一个无用的虚拟变量。
相反,我们可以这样做:
template <typename T>
void foo(std::vector<T> &t) {
auto var = t[0];
std::vector<decltype(var.Get())> array;
}
这不会创建任何虚拟对象,但是这可能会崩溃,因为我们不能保证数组至少包含一个元素。
有没有一种方法可以在不创建虚拟对象的情况下推断 .Get() 的类型?
最佳答案
std::vector<decltype(t[0].Get())>
t[0]
不会被调用,因为 decltype
是未计算的上下文。
备选方案:
std::vector<decltype(T().Get())>
std::vector<decltype(std::declval<T&>().Get())>
关于c++ - 如何在不创建实例的情况下获取类的方法成员的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57453938/