【发布时间】:2016-11-24 10:19:14
【问题描述】:
例如,我声明了一个通用模板:
template <class T>
void foo(T value);
但我需要每个类型的程序员都必须声明其专业化:
struct my_user_t
{
// ...
};
template <>
void foo<my_user_t>(my_user_t value) {
// ...
}
// Somewhere in big program:
my_user_t my_value;
foo(my_value);
现在如果程序员忘记为他的用户类型专门化模板,链接器说它找不到符号,而不是编译器。所以在大程序中很难找到它在哪里使用。
我怎样才能像这样声明模板:
template <class T>
void foo(T value) {
static_assert(???, "You must specialize foo<> for your type");
}
这样编译器(不是链接器)会说我在哪里错误地使用了foo(my_user_t)?
【问题讨论】:
-
您使用的是哪个 C++ 标准?
-
这是一个更好的副本。我问了几乎完全相同的问题stackoverflow.com/questions/39250545/…