Как настроить статические константные переменные внутри шаблонных классов? - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть следующий код:

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 ".

Twoисправления, которые я пробовал, которые мне не нравятся, включают изменение const на constexpr (успешно компилируется на моем компьютере, но не на другом с более старой версией gcc) и определение значения констант ниже класса,но это отделяет значения слишком далеко от того места, где я хочу их использовать. Любые другие идеи?

1 Ответ

1 голос
/ 03 ноября 2019

Просто превратите их в функции-члены:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...