用户指定的非类型模板参数依赖于推导的模板

User specified non-type template parameter dependent on deduced template

我有一个类似数组 class 的非类型 enum 访问器。

template <class T, class Enum, size_t N>
struct enum_array {
    template <Enum E>
    void do_fancy_thing_with_non_type();
};

我在实现 get 函数时遇到问题(它位于单独的命名空间中),因为提供的非类型模板参数取决于推导的 class 模板参数。

// This cannot work, 'Enum' isn't deduced at point of declaration.
template <Enum E, class T, class Enum, size_t N>
constexpr T& get(enum_array<T, Enum, N>& a) noexcept {
    //return ...;
}

get<some_enum::val>(arr);

我知道 c++17 有 auto 模板参数可以解决这个问题,但不幸的是这段代码只适用于 c++14。在 C++14 中,有没有一种方法可以推断出非类型参数类型,同时仍需要用户提供它?

这似乎在 c++14 中是不可能的。最好的解决方案是使用成员函数。