1

我正在为微控制器开发我的 c++ 库,我需要一种方法来根据模板类型指定不同的枚举类内容。

到目前为止我有这个代码:

#include <cstdint>
#include <type_traits>

enum class timer_e {
    timer1,
    timer2
};

template<typename>
struct is_basic_timer : std::false_type {};

template<>
struct is_basic_timer<timer_e::timer1> : std::true_type {};

template<typename>
struct is_advanced_timer : std::false_type {};

template<>
struct is_advanced_timer<timer_e::timer2> : std::true_type {};

template<timer_e T>
class Timer {
public:

    // Prototype for options enum.
    enum class options;

    typename std::enable_if<is_basic_timer<T>::value, decltype(options)>::type options : std::uint32_t {
        basic_option_1,
        basic_option_2
    };

    typename std::enable_if<is_advanced_timer<T>::value, decltype(options)>::type options : std::uint32_t {
        basic_option1,
        basic_option2,
        advanced_option1,
        advanced_option2
    };

    static void enableOption(options o) {
        SFR |= static_cast<std::uint32_t> (o);
    }

    static void disableOptions(options o) {
        SFR &= ~static_cast<std::uint32_t> (o);
    }

private:
    Timer() = delete;
};

Timer 类应该只静态使用。我希望根据模板类型修改选项枚举内容,以避免在特殊功能寄存器(SFR)中设置不支持的选项。上面的代码是我最好的尝试,但是编译器不喜欢我使用 decltype。

有没有办法通过上面定义的类型特征根据模板类型声明不同的枚举类内容?

4

0 回答 0