作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我认为这会更容易;我有这样一个类:
template <int dim, int spacedim>
class FE_problem
{
//...
void generate_mesh();
}
我对那个成员函数 generate_mesh
有一个特殊的要求:我需要它根据 dim
和 spacedim
的 value 明确不同。
我做了几次尝试,例如:
template <int dim, int spacedim>
void FE_problem<1, 3>::generate_mesh()
{
...do a kind of mesh initialization ...
}
template <int dim, int spacedim>
void FE_problem<3, 3>::generate_mesh()
{
...do another kind of mesh initialization ...
}
但是无法编译。
我试过使用std::enable_if
,但我仍然不太了解它是如何工作的,我不知道它是否是正确的方法。
为了避免(暂时)我用宏尝试过的问题,在定义方法时使用以下代码:
#if DIM 1
template <int dim, int spacedim>
void FE_problem<dim,spacedim>::generate_mesh()
{
...do a kind of mesh initialization ...
}
#elif DIM 3
template <int dim, int spacedim>
void FE_problem<dim,spacedim>::generate_mesh()
{
...do another kind of mesh initialization ...
}
#endif
然后,在 main
函数中初始化类时,我尝试了类似的方法:
#define DIM 1
auto FE1 = FE_problem<1, 3>();
#undef DIM
#define DIM 3
auto FE2 = FE_problem<1, 3>();
#undef DIM
希望预处理器会进行正确的替换,但结果是 DIM 结果未定义(在两种情况下)。这是因为预处理器替换 DIM 的顺序吗?有解决办法吗?
最佳答案
你几乎拥有它。当您特化模板时,它不是部分特化,您不包含任何模板参数。这样做会使代码看起来像
template <int dim, int spacedim>
class FE_problem
{
public:
void generate_mesh();
};
template <> // full specialization, leave template parameter blank as they are provided below
void FE_problem<1, 3>::generate_mesh()
// ^^^^ specify the specialized types/values here
{
std::cout << "void FE_problem<1, 3>::generate_mesh()\n";
}
template <> // full specialization, leave template parameter blank as they are provided below
void FE_problem<3, 3>::generate_mesh()
// ^^^^ specify the specialized types/values here
{
std::cout << "void FE_problem<3, 3>::generate_mesh()\n";
}
int main()
{
FE_problem<1, 3>{}.generate_mesh();
FE_problem<3, 3>{}.generate_mesh();
}
哪些输出
void FE_problem<1, 3>::generate_mesh()
void FE_problem<3, 3>::generate_mesh()
关于C++模板显式声明成员函数值/避免宏问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55245376/
我是一名优秀的程序员,十分优秀!