【发布时间】:2019-01-29 22:17:45
【问题描述】:
如果我有一个包含在整个项目中的标头 foo.h,那么当它包含的只是以下内容时,它似乎可以正常工作:
template<typename T>
void foo(const T param) {
cout << param << endl;
}
但是当我向 foo.h 添加规范时,我得到一个定义规则 (ODR) 错误:
template<>
void foo(const bool param) {
cout << param << endl;
}
显然我可以通过inline'ing 专业化来解决这个问题。我的问题是,我为什么需要?如果模板不违反 ODR,为什么还要专门化?
【问题讨论】:
-
如果定义了主体,模板函数的特化就是定义。
-
@NathanOliver 是的,我看过那个……它没有解决专业化问题。我真的只是希望官方说我必须
inline。看起来像StoryTeller has got me。 -
@JonathanMee 不是吗?在 tpl.h(取自 Explicit Specialization)下的答案中间呢: 具有完全相同的代码块?
-
@NathanOliver Heh... 看看那个。我只看了这个问题:/我不介意重复这个。因为那里回答得很好。你怎么看?
标签: c++ inline template-specialization one-definition-rule template-function