【发布时间】:2018-08-17 17:44:10
【问题描述】:
简单的例子是 size_t。假设:
typedef uint64_t size_t;
我想以不同的方式专注于 uint64_t 和 size_t:
template <class T>
struct MyType {};
template <>
struct MyType<uint64_t>{
void operation()() { cout << "uint64_t" << endl; }
};
template <>
struct MyType<size_t>{
void operation()() { cout << "size_t" << endl; }
}
MyType<1ULL>()();
MyType<static_cast<size_t>(1ULL)>()();
这甚至可能吗?有没有获得相同净效果的技巧?
【问题讨论】:
-
你可以试试
enum class my_size_t : size_t { }。 -
是的,但这种假设假设用户直接使用 my_size_t。试图避免这种情况。
-
我不认为你可以做你正在尝试的事情。我会用聪明的技巧让别人证明我错了。
-
这就是我的想法。可能对我一厢情愿。
-
这是不可能的,因为 typedef 只是一个别名,它不会引入新类型。
标签: c++ templates typedef template-specialization