gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:40 26 4
gpt4 key购买 nike

假设我们有:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com