<分区>
我尝试制作一个模板,使其仅适用于 double 类型和用户定义类型。 用户可以通过包含的头文件中的 typedef 选择用户定义的类型。
typedef float Usertype;
我通过在模板源文件末尾写入以下内容解决了这个问题:
template class SpaceDiscretizer<Datatype::Usertype>;
template class SpaceDiscretizer<double>;
但是,当用户将 Usertype 定义为 double 时,我遇到了问题! 我试着遵循一些指示,即这些主题:How can I provide template specializations for typedefs of the same type? , Conditional explicit template instantiation
struct dummy{};
template class SpaceDiscretizer< std::conditional<std::is_same<double,Datatype::Usertype>::value, dummy, double>::type>;
//typedef typename std::enable_if<false,double>::type mytype;
//template class SpaceDiscretizer<mytype>;
template class SpaceDiscretizer<Datatype::Usertype>;
第一个不起作用,因为如果 SpaceDiscretizer 被任何不复杂的东西初始化,除了 double,它就不起作用。但我想为用户提供一种简单的方法来添加一个有效的替代方法来替代 double in feature。 第二次(已注释掉)尝试失败,因为这不是重载,如果类型不存在,则不会忽略 mytype,而是会输出错误。
编辑: 我有很多地方不使用模板,或者必须确保多个未连接的类使用相同的数据类型。我需要将实现保留在 .cpp 文件中。为了解决这个问题,我在所有相关的地方都包含了一个头文件,这样用户就可以在一个地方更改值并保持一致。问题出现了,因为我总是想为 double 进行初始化,但是用户将 double 指定为 Usertype 是很自然的。