c++ - 在辅助方法中包装 std::get<>

标签 c++ templates variadic-templates stdtuple

我有这样一个类:

template<typename ...Els>
class Istr {
    std::tuple<Els...> Vals 
}

class Istr1 : public Istr<std::string> {
     void Do() { std::get<0>(Vals) = "Meh."; }
}

有没有办法定义一个我可以像这样使用的函数模板?

Tok(0) = "Meh."
Istr i; i.Tok(0) = "Meh."

或者,如果不可能,像这样?

Tok<0>() = "Meh."

在我天真的方法中,我想出了一个错误的代码:

template<typename T>
T Tok(size_t i) { return std::get<i>(Vals); }

当我使用它隐式实例化模板时,编译器实际上无法推断出 T 的类型。

最佳答案

template<size_t i>
auto Tok() -> decltype( std::get<i>(Vals) ) {
    return std::get<i>(Vals);
}

Live demo

关于c++ - 在辅助方法中包装 std::get<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34697264/

相关文章:

c++ - 在 Windows 的 Eclipse C++ 中运行 Hello World 应用程序

c++ - (Qt) 如何在 View 中实现 editorOpened(index) 和 editorClosed(index) 信号

c++ - 嵌套可变参数模板 : bug in gcc or clang?

c++ - 如何将 std::find_if 与唯一指针 vector 一起使用?

python - 如何通过 pybind11 在 Python 中访问 C/C++ 数组

C++ 模板编译器错误

c++ - 类型推导不适用于 std::function

c++ - 模板值的公共(public)访问

c++ - 表示函数参数的元组的类型表达式

c++ - 多个可变函数的单个模板参数包?