c++ - 如何在不创建实例的情况下获取类的方法成员的类型?

标签 c++ arrays templates generics types

假设我们有:

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/

相关文章:

c++ - 链接来自静态成员的错误

c++ - 如何知道指定的文件是否被正确读取?

C++ 应用程序超出内存但不使用虚拟内存

c++ - 当我使用模板将一个字符数组复制到另一个数组时出现问题

c++ - 如何在 C++ 中生成随机数?

c - Typedef 数组怪异

c - 动态长度数组

arrays - 谷歌表格 : Array formula for fixed cell value

javascript - ExtJS 4.2.1 - 将文本字段添加到 XTemplate

c++ - 限制可变参数模板参数包中的参数数量