gpt4 book ai didi

c++ - 如何获取函数返回类型的模板成员的取消引用类型

转载 作者:可可西里 更新时间:2023-11-01 18:17:13 27 4
gpt4 key购买 nike

我怎样才能为以下函数 to_vector 获得正确的类型 T

template<typename K> struct A { K* p; size_t n; std::string foo; };
template<typename K> struct B { K* p; size_t n; float bar[3]; };

template<typename X>
std::vector<T> to_vector(const X& x) { // what is T?
return std::vector<T>(x.p, x.p+x.n);
}

我尝试使用 decltype(*std::declval ().p) 但这会导致 error:forming pointer to reference type 'float&' for下面的例子:

A<float> a = { new float[10], 10, "hello" };
std::vector<float> v = to_vector(a);

这是一些更大代码的一部分,还有更多类型,例如 AB。但是都有一个指针p和一个长度n

最佳答案

你可能会使用

typename std::decay<decltype(*X::p)>::type

for T 因为 decltype 是未评估的上下文,因此 X::p 在这里是合法的。另外,std::decay看起来很合适,因为它结合了 std::remove_referencestd::remove_cv

关于c++ - 如何获取函数返回类型的模板成员的取消引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20820520/

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