gpt4 book ai didi

c++ - 在 C++ 模块的模板中使用非导出函数

转载 作者:可可西里 更新时间:2023-11-01 17:57:29 27 4
gpt4 key购买 nike

考虑以下模块:

module M;

// a private, non-exporting function
int id(int x) {
return x;
}

export
template <class T>
int f(T x) {
return id(0);
}

export
int g(int y) {
return id(1);
}

以及以下使用它的 C++ 代码:

import M;

int main() {
g(42);
return 0;
}

它使用 VS2015 update 1 成功编译并运行,但如果我将 g 替换为 f,编译器会报错:error C3861: 'id': identifier未找到

如何解决?

最佳答案

您遇到这个问题是因为模板实例化规则。出于与在 C++ 头文件中包含模板定义(并且不要在单独的 .cpp 文件中定义它们)相同的原因,您不能以这种方式从模块中导出模板函数。

从模块中导出模板函数或类不是一个好习惯,因为您应该在该模块中拥有所有可能会用到的实例化。但是,如果出于某种原因你想以这种方式实现它,你应该在模块中用 T 作为 int 实例化函数 f() ,例如在此模块中添加带有整数参数的无用调用。

关于c++ - 在 C++ 模块的模板中使用非导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35772163/

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