首页 > 解决方案 > 没有定义的模板规范

问题描述

我有以下代码

template <typename Signature>
class Holder;

template <typename I, typename O>
struct Holder<O(I)> {
        // code here
        }
};

...
int main()
{
    ...
    Holder<int(double)> a;
    ...
}

我知道一个参数模板参数的声明是必要的(因为我用一个函数对象参数调用模板类);但是如果在这种情况下我真的提供模板规范,我不明白。我认为模板的规范需要定义(不仅仅是声明)它,而在这种情况下,我只是声明了单参数模板,然后我将其定义为具有两个参数的模板。技术上发生了什么?

标签: c++ooptemplates

解决方案


不,这是一个有效的模板专业化(不是“规范”,这是一个错误的词)。

声明但未定义的主要(非专业)模板没有任何特殊效果。您将无法创建它的实例(就像未定义的非模板结构一样),但仅此而已。


推荐阅读