Ada*_*dam 23 c++ templates extern
我跳了进去winnt.h
,发现代码如下:
extern "C++" // templates cannot be declared to have 'C' linkage
template <typename T, size_t N>
char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N];
Run Code Online (Sandbox Code Playgroud)
我想问一下如下问题:
extern "C++"
工作怎么样?对于问题3,我的意思是我可以将模板的declearation和定义分开,然后为模板生成动态链接,而不使用这个技巧实际给出实现吗?
Sne*_*tel 23
好吧,extern "C++"
当然不会在C中工作(虽然有些编译器可能会支持它作为扩展).所以在C++中使用它才有意义.
这是因为在多个嵌套的extern链接说明符的情况下,最里面的一个生效.因此,如果您有一个包围的头文件extern "C"
,您可以使用extern "C++"
暂时中断它并使用C++链接声明某些内容.
当你想为C++库提供一个通用的C接口时,它是最有意义的,但你也想为在C++中实际使用它的人提供C++帮助位.所以你要把#ifdef __cplusplus \ extern "C" { \ #endif
整个标题放在一边,然后你在这些位中使用extern "C++"
以恢复到C++链接.