是否有可能声明符号是函数模板的显式实例化,而不首先定义函数模板?在没有模板的情况下声明函数模板实例化
它会向编译器表示在另一个实例化的翻译单元中存在函数模板,并且我们要调用实例化的函数。
// declaration of instantiation, perhaps it would look like one of these:
// template<typename> void foo(int);
// template<typename> void foo<int>(int);
void bar(int i) {
// definition of function unknown to caller, it shouldn't matter
foo(i);
// either that or this perhaps:
foo<int>(i);
}
有没有技术上的原因,这是不能做的,或者它只是因为缺乏语法?是否存在无法在声明中提供足够信息以生成对实例化函数模板的调用的原因?
这个X背后没有Y.这个问题是字面意思。这是关于C++语言的一个抽象问题。我可以提供一个不编译的例子,但这只是一个分心。
这个问题本身也不是专业化。模板是否专业化无关紧要。这个问题只涉及声明一个模板存在并且它被实例化了。
相关问题:How do I explicitly instantiate a template function? - 但是这并没有解决这个问题,因为它需要完整的模板定义是可见的。
什么是你想在这里实现更高水平的目标是什么?您可能需要更清楚地说明您的示例 - 确切地说哪些行不通?我现在大约有70%清楚你现在要问什么。 :) – 2014-10-02 04:34:16
请注意,如果您只需要调用该函数,则声明明确的实例化是多余的。这是正确的并且实例化:'template void foo(T t); void bar(){foo(5); }' –
2014-10-02 04:49:40
@MattMcNabb我在这个问题的初稿中实际上有一个关于这个问题的链接,但认为它是无关紧要的。 – Praxeolitic 2014-10-02 04:49:52