我有一个类模板,其中包含一个主模板,旨在与任何类型参数
问题是我必须为每个特定情况创建大量的完全专业化。如果我想修改或添加类的内容,我必须对每个专业化进行操作,这对于可维护性来说真的很糟糕。
我希望有一种类型特征,可以检查T的类型。如果T是某种类型,例如uint64_t,那么我们就知道方法的输入或方法内部的某些变量需要是uint32_t类型。这将使我能够自定义模板而无需额外的维护成本。
T
一起使用。然而,由于某些特殊需求,我需要像这样使用模板特化:template<typename T>
class foo
{
private:
T result;
public:
void modify_result(T a)
{
result = some_operations(a);
}
};
template<>
class foo<uint64_t>
{
private:
uint64_t result;
public:
// notice: uint32_t not the same as our template argument
void modify_result(uint32_t a)
{
result = some_operations(a);
}
};
问题是我必须为每个特定情况创建大量的完全专业化。如果我想修改或添加类的内容,我必须对每个专业化进行操作,这对于可维护性来说真的很糟糕。
我希望有一种类型特征,可以检查T的类型。如果T是某种类型,例如uint64_t,那么我们就知道方法的输入或方法内部的某些变量需要是uint32_t类型。这将使我能够自定义模板而无需额外的维护成本。
typename parameter_type<T>::type
,您还可以在类中声明一个类型别名using parameter = typename parameter_type<T>::type;
,或者自C++20起,只需声明using parameter = parameter_type<T>::type;
。 - Jan Schultketypename parameter_type<T>::type
,你还可以在类中声明一个类型别名using parameter = typename parameter_type<T>::type;
,或者自C++20以来只需写using parameter = parameter_type<T>::type;
。 - Jan Schultke