我有一个结构Foo
。我想添加某种 id(占位符?)以从传递给不同Foo
对象的值元组中静态选择。理想情况下,我不会将其设为模板类型,因为它会触发其他位置的许多更改。
我尝试向它添加一个整数并使用 constexpr 表达式(演示)
#include <tuple>
using namespace std;
struct Foo {
private:
const int pl;
public:
constexpr Foo (int c) : pl(c) {}
constexpr int place() {return pl;}
template <typename... T>
constexpr int extract(std::tuple<T ...> const &vals) {
// I would like to uncomment the following but it fails compiling
// return std::get<pl>(vals);
return std::get<0>(vals);
}
};
int main(void) {
constexpr Foo f(1);
constexpr std::tuple<int, int> test = std::make_tuple(0, 10);
// The following passes
static_assert(f.place() == 1, "ERROR");
// The following fails
static_assert(f.extract(test) == 10, "ERROR");
}
我期待我可以使用constexpr place()
in get<>
,我错过了什么?
不使用模板我有出路吗?