类静态功能外部链接
Class static function external linkage
当编译器认为代码是本地链接或内联时,如何实现类静态函数的外部链接?
考虑三个文件:
特征.h:
template <typename T>
struct Traits
{
static int InlineFunction(T);
static int Function(T);
};
traitsimp.cpp:
#include "traits.h"
template <>
struct Traits<int>
{
static int InlineFunction(int) { return 42; }
static int Function(int);
};
int Traits<int>::Function(int i) { return i; }
main.cpp:
#include "traits.h"
int main()
{
int result = Traits<int>::Function(5);
result = Traits<int>::InlineFunction(result);
return 0;
}
编译时接收:
$ g++ traitsimp.cpp main.cpp -o traitstest
/tmp/cc6taAop.o: In function `main':
main.cpp:(.text+0x1b): undefined reference to `Traits<int>::InlineFunction(int)'
collect2: ld returned 1 exit status
如何说服编译器在类定义中编写函数的同时,为InlineFunction提供外部链接?
我认为您需要决定是进行外部链接并定义越界,还是保持内联并有效地只进行内部链接。是否有理由不在标题中定义Traits<int>
?请注意,完全专业化不再是一个模板,因此与非模板化函数相比,它的处理方式实际上没有什么区别。
编辑:在VS2010中尝试过,可能仍然不适合,但您可以将代码放在traitsimp.cpp
中,该代码采用方法的地址:
auto getAddress = &Traits<int>::InlineFunction;
这将强制该方法获取地址。我对这种行为是否标准有点生疏。
相关文章:
- 未解决的外部链接问题
- CMake 无法链接外部库
- 外部"C"拆卸导致奇怪的链接器错误
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 链接外部C++外部C++ 在主文件中?
- C++ 为什么在定义的编译和链接之前引用外部实例的程序
- 内联函数/变量的外部链接
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- C++ 链接器错误 LNK 2019 函数中引用的未解析的外部符号
- C 与 C++ 枚举链接与外部"C"
- 在 CMake 中链接外部 HDFql 库
- CURL 静态链接未解析的外部符号
- 在 Android Studio 中使用 NDK、Gradle 和 CMake 链接外部库
- CMake为什么通过相对路径链接外部库
- 如何使用 CMake 正确链接外部库
- 有没有办法在整个项目中包含和链接外部库,只编辑我的顶级 CMakeList
- Android:在Android Studio中链接外部静态C/C++库
- 链接外部变量 c++ 时出错
- 如何在llvm IR表示中链接外部库
- 在Android Studio (gradle)中链接外部库