在库中公开constexpr专用模板函数

时间:2019-03-01 14:37:11

标签: c++ c++11 templates g++

我有一个带有模板功能的类。其中之一是 constexpr 函数。我想将该类编译为库,并使用其他客户端的专用模板函数。 示例:

myfnc1<AnotherClass>

当我尝试在另一个库中使用myfnc2<AnotherClass2>时,它说未定义,但是我可以使用nm。当我用{{1}}检查libmyclass.so时,我可以看到使用AnotherClass2创建的myfnc2模板,但是没有。我知道这是原因,但是想知道是否有代码可以正常工作吗?

我正在使用g ++ 4.4.2。版本。

1 个答案:

答案 0 :(得分:0)

如果我更改:

template std::string myclass::myfnc2<AnotherClass2>() {return "str2"; }

template<> std::string myclass::myfnc2<AnotherClass2>() {return "str2"; }

我可以编译。错字?

> g++ -fPIC -shared x.cpp -O3 -o x.so
> nm x.so | c++filt | grep fnc

导致:

0000000000000680 T char const* myclass::myfnc1<AnotherClass>()
0000000000000690 T std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > myclass::myfnc2<AnotherClass2>()

我不知道您是否真的能够对代码中的失败进行编译。但是我可以将其与更改一起编译,并获得预期的结果。但是我正在使用g++ (GCC) 8.2.1