gpt4 book ai didi

c++ - 努力使用模板化结构选择类型

转载 作者:行者123 更新时间:2023-11-30 02:32:04 24 4
gpt4 key购买 nike

我有一个这样声明的结构:

template <typename T, typename U> struct select_type;

我擅长于:

template <> struct select_type<float, double>
{
typedef double type;
};

对于多种类型,依此类推,例如 <double, float> , <int, float> ...

我在我的一些模板函数中使用它,例如:

template <typename T, typename U, typename select<T,U>::type R >
smu::Matrix<R> operator*(const smu::Matrix<T>& a, const smu::Matrix<U>& b)
{
/* code here */
}

我尝试了几种方法来使用它,没有 R , 没有 typename但大多数时候我在请求 nested-name parameter before select 时出错.事实是我从来没有这样做过,我不知道我应该如何使用这个结构。谁能帮我解决这个问题?

最佳答案

这里有一些错误。你声明的方式 R :

typename select<T,U>::type R 

作为 select<T,U>::type 类型的 .那不是你想要的-你想要R成为那个类型。其次,R是一个非推导上下文——它是一个模板参数,没有在任何参数中指定,所以不能推导,只能明确指定。但是你也不能真正明确地指定它,因为这违背了方便 operator* 的意义。反正。

在 C++11 及更高版本中,您可以将其设为默认类型参数:

template <typename T, typename U, typename R = typename select<T,U>::type>
smu::Matrix<R> operator*(const smu::Matrix<T>& a, const smu::Matrix<U>& b)

但是在C++03中,你不能有默认的函数模板参数,所以你只需要写出来:

template <typename T, typename U>
smu::Matrix<typename select<T,U>::type> operator*(const smu::Matrix<T>& a,
const smu::Matrix<U>& b)
{
typedef typename select<T,U>::type R;

/* rest as before */
}

关于c++ - 努力使用模板化结构选择类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36840423/

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