【发布时间】:2019-09-20 08:19:23
【问题描述】:
我编写了一个依赖于给定类型和可变参数类型的模板类,如下所示:
template<typename ConstType,typename...Inputs>
class ConstantTensor;
那我再写一个类,一般是这样定义的(假设wrong_type随便你想什么类型,但和下面的特化不一样):
template<typename T>
class X{
public:
using type=wrong_type;
}
我也有这种专长:
template<typename ConstType,typename...Inputs>
class X< ConstantTensor< ConstType ,Inputs...>>
{
public:
using type=right_type;
}
我的问题是,如果我定义了ConstantTensor<ConstType,double> 类型,然后我想使用X<ConstantTensor<ConstType,double>>::type,则调用的是一般情况而不是专业化。所以我得到wrong_type 而不是right_type。我想它必须处理double 类型...你能解释一下为什么以及如何解决这个问题吗?提前谢谢你。
编辑: 这是一个sn-p的代码,我希望它有效:
class Scalar
{};
template<typename ConstType,typename...Inputs>
class ConstantTensor
{
public:
constexpr ConstantTensor(const Inputs&...inputs)
{}
};
template<typename ConstType,typename...Inputs>
constexpr auto Constant(const Inputs&...inputs)
{return ConstantTensor<ConstType,Inputs...>(inputs...);}
template<typename T>
class X{
public:
using type=int;
};
template<typename ConstType,typename...Inputs>
class X<ConstantTensor<ConstType,Inputs...>>{
public:
using type=char;
};
int main()
{
constexpr auto delta=Constant<Scalar>(2.0);
using type= X<decltype(delta)>::type; // this is int not char
}
【问题讨论】:
-
无法复制;请问,您能否添加一个完整但最小的示例来重现该问题?
-
我希望现在实际上更清楚,我写的代码没有错误。
标签: c++ templates c++14 variadic-templates template-specialization