gpt4 book ai didi

c++ - 在没有模板的情况下声明函数模板实例化

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:09 25 4
gpt4 key购买 nike

是否可以在不先定义函数模板的情况下声明一个符号是函数模板的显式实例化?

它会向编译器表明在某个地方实例化的另一个翻译单元中存在一个函数模板,我们要调用实例化的函数。

// 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? - 然而,这并不能解决这个问题,因为它需要完整的模板定义是可见的。

最佳答案

你可以在这里使用“外部模板”。它告诉编译器不要在每个翻译单元中实例化它。这是 C++11 增强功能的一部分。例如,我们可以在头文件 a.hpp 中将模板声明为

// a.hpp
template <class T>
T fun(T& a);

然后在a.cpp中

// a.cpp
#include "a.hpp"
extern template int fun(int&);
int main()
{
int a = 100;
return fun(100);
}

而在 b.cpp 中我们实际上可以实例化模板:

// b.cpp
#include "a.hpp"

template <>
int fun(int& x)
{
return x + 1;
}

关于c++ - 在没有模板的情况下声明函数模板实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26154520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com