【发布时间】:2016-12-29 03:03:37
【问题描述】:
我正在尝试在 C++/CLI 的命名空间中编写一些函数模板,如下所示:
// header file
namespace MyCLI {
namespace MyFunctions {
template <typename T>
double sum(T a, T b) {
return (double) a + b;
}
}
}
第一个问题是,当我将项目编译为 dll 并尝试使用它时,命名空间 MyFunctions 没有出现。我认为这是因为我没有为我需要的所有类型显式实例化我的模板,所以我在头文件的底部添加了以下内容:
extern template double MyCLI::MyFunctions::sum<double>(double,double);
但这仍然无法让我访问 sum 类型的 double 函数。我的怀疑是,由于项目被编译成托管代码,这遵循了 C# 的规则,即没有类就不能拥有函数。所以接下来我尝试在命名空间 MyCLI 中创建一个类,并使 sum 成为该类的静态成员,如下所示:
// header file
namespace MyCLI {
public ref class MyFunctions
{
public:
template <typename T>
static double sum(T a, T b) {
return (double) a + b;
}
};
}
extern template double MyCLI::MyFunctions::sum<double>(double,double);
现在,当我使用程序集时,我可以在 MyCLI 中看到 MyFunctions 类,但我仍然无法从该类访问 sum 函数。
如果有人能给我任何关于如何解决这个问题的指示,或者我为什么首先面临这个问题,我将非常感激。
【问题讨论】:
标签: templates namespaces c++-cli