Я пишу шаблонный класс, зависящий от данного типа и переменных типов, например:
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
... Не могли бы вы объяснить, почему и как я могу решить эту проблему?Заранее спасибо.
РЕДАКТИРОВАТЬ: Вот фрагмент кода, я надеюсь, что это работает:
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
}