如何在模板类中设置静态常量变量

How to set up static const variables inside templated classes?

本文关键字:设置 静态 常量 变量      更新时间:2023-10-16

我有以下代码:

template<typename flow_t, typename cost_t>
struct min_cost_flow {
static const flow_t FLOW_INF = numeric_limits<flow_t>::max() / 2;
static const cost_t COST_INF = numeric_limits<cost_t>::max() / 2;
...
};

不幸的是,它没有编译,并给出错误"[…]对`min_cost_flow::cost_INF的未定义引用"。

我尝试过的两个不喜欢的修复方法包括将const更改为constexpr(在我的机器上成功编译,但在另一台使用较旧版本的gcc的机器上没有成功编译(,以及定义类下常量的值,但这将值与我想要使用它们的位置分隔得太远。还有其他想法吗?

只需将它们转换为成员函数即可:

template<typename flow_t, typename cost_t>
struct min_cost_flow {
static const flow_t FLOW_INF() { return numeric_limits<flow_t>::max() / 2; }
static const cost_t COST_INF() { return numeric_limits<cost_t>::max() / 2; }
};

如果编译器不支持C++11,请使用const而不是constexpr