【发布时间】:2018-02-08 23:10:11
【问题描述】:
我正在开发一个需要关联容器的 C++ 类(map 或 unordered_map)
我的班级是这样的:
template<typename T>
class myClass
{
static_assert(
std::is_copy_constructible<T>::value,
"content of myClass should be copy constructible"
);
// TODO: check if T::operator== exists
/* if hash<T> is available */
using container = std::unordered_map<T,T>;
/* if hash<T> is unavailable */
using container = std::map<T,T>;
public:
myClass() = default;
[...]
private:
container m_mapping;
}
我希望自动从模板T推导出容器:
- 如果
std::hash<T>可用,我们应该使用unordered_map来提高性能。 - 如果
std::hash<T>不可用,我们应该回退到map
有没有办法使用 c++ 模板来做到这一点?
【问题讨论】:
-
所以您希望编译器在不告诉您的情况下彻底改变您的应用程序的性能特征?
-
有趣的问题。
-
@NeilButterworth 我希望编译器选择我想要的,而不必每次都指定。
-
为什么指定类型这么麻烦?这显然比编写一些复杂的模板代码要简单得多。这是一个真正的应用程序吗?
-
并非如此。基本上我正在编写这个助手类,它将包含在一个更大的软件中。我可能是唯一一个使用它的人,但我想设计它以便其他人可以轻松地重复使用它。所以它可能不会被使用,但我想学习现代 c++ 的魔力并知道这样的事情是否可能。
标签: c++ templates template-specialization