0

我尝试在 C++ 的元编程技术中实现有点智能的 Pair 类。我希望我的类可以包含不同的类型和常量。就像下面的代码:

template <typename F, typename S>
struct Pair {
    typedef F first;
    typedef S second;
};

template <typename F, bool Cond>
struct Pair {
    typedef F first;
    static const bool second = Cond;
};

但是这段代码会导致 gcc 4.8.1 上的编译错误

error: template parameter ‘class S’
template <typename F, typename S>
                      ^
error: redeclared here as ‘bool Cond’

有没有办法通过 const 模板参数重载结构?

4

1 回答 1

2

像这样的东西会满足您的需求吗?

#include <type_traits>

template <typename F, typename S>
struct Pair {
    typedef F first;
    typedef S second;
};

template <typename F>
struct Pair<F, std::integral_constant<bool, true>> {
    typedef F first;
    static const bool second = false;
};

template <typename F>
struct Pair<F, std::integral_constant<bool, false>> {
    typedef F first;
    static const bool second = true;
};

Pair<int, std::true_type> t;
Pair<int, std::false_type> f;

或更通用的方式:

template <typename F, typename T, T Val>
struct Pair<F, std::integral_constant<T, Val>> {
    typedef F first;
    static const T second = Val;
};

Pair<int, std::integral_constant<int,42>> p;
于 2013-10-20T17:09:43.873 回答