我有C++17项目与以下项目布局:
src/
Common/
Main/
在Common
中,我有用于沙漠化的模板函数
namespace Common
{
template <class T>
T FromJson(std::string_view json)
}
在Main
中,我想对Main
可访问类型Config
进行专门化,我该怎么做呢?
我试过这个(Main/example.cpp):
#include "Common/Serialzation.hpp"
#include "Config.hpp"
namespace
{
template <>
Main::Config Common::FromJson(std::string_view json) {
// use of other FromJson<T> specializations
}
}
/* other code that use FromJson<Main::Config> */
但这失败了。
为了解决这个问题,我修改了函数名(下面的代码可以正常工作):
#include "Common/Serialzation.hpp"
#include "Config.hpp"
namespace
{
Main::Config LoadFromJson(std::string_view json) {
// Common::FromJson is used here fine, no compile errors
}
}
/* other code that use FromJson<Main::Config> */
但是这个解决方案对我来说非常糟糕。
1条答案
按热度按时间d7v8vwbk1#
正如在注解中已经指出的,您需要在声明模板函数的相同名称空间中专门化模板函数。
例如,请参见以下代码: