gpt4 book ai didi

c++ - 模板而不是 cpp 预处理器以避免链接?

转载 作者:太空狗 更新时间:2023-10-29 20:17:52 28 4
gpt4 key购买 nike

是否可以使用 C++ 模板来避免链接到包含最终未调用的函数的库?例如,使用如下代码:

template <typename T>
struct Foo {
void bar() { zod(); }
};

int main(int argc, char *argv[])
{
return 0;
}

GCC 4.5 将拒绝它:错误:“zod”没有依赖于模板参数的参数,因此“zod”的声明必须可用注意:(如果你使用“-fpermissive”,G++ 将接受你的代码,但允许使用未声明的名称已被弃用)

这里的错误是标准强制性的吗?有没有办法使用模板来实现这一点?因此避免使用 cpp 宏。

最佳答案

我认为您混淆了 linkingproviding a prototype for zod() (即声明,例如通过包含头文件).

许多实现会愉快地编译和链接具有内联 函数(或模板)的程序,这些函数在没有定义的情况下调用函数。所以,这工作得很好(至少 MSVC 10、GCC 4.3 和 GCC 4.5):

void zod(); // we need the declaration, but no definition

inline void bar() { zod(); }

int main(int argc, char *argv[])
{
return 0;
}

不过我不确定标准是否强制要求这样做。当然,它也应该使用模板而不是 inline,只要模板从未实例化即可。

关于c++ - 模板而不是 cpp 预处理器以避免链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5761246/

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