在帮助程序方法中包装 std::get<>
Wrap std::get<> in helper method
我有一个这样的类:
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);
}
实时演示
// Deduce `TI` thanks to the function argument.
template<typename TTuple, typename TI>
auto my_get(TTuple tuple, TI)
{
// `TI` needs to be an `std::integral_constant`.
return std::get<TI{}>(tuple);
}
// `constexpr` variable template.
// `sz_v<0>` is `std::integral_constant<std::size_t, 0>{}`.
template<std::size_t TI>
constexpr std::integral_constant<std::size_t, TI> sz_v{};
// Example call.
// Results in `std::get<0>(some_tuple)`.
my_get(some_tuple, sz_v<0>);
如果你把它定义为一个方法,你可以这样称呼它:
struct some_struct
{
std::tuple<...> some_tuple;
};
some_struct s;
s.my_get(sz_v<0>);
相关文章:
- Cpp-Tuple使用带有变量的get
- EASTL矢量<向量<int>>连续的
- 通过 get-Method 访问变量在类外不起作用
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- C++中是否有任何函数等同于python中字典的get函数?
- 使用istringstearm和get行缓慢读取文件
- 如何将 c++ get 函数代码转换为 opencv 算法中使用的 python
- 使用 cin.get() 初始化字符数组
- std::variant<>::get() 不能使用 Apple LLVM 10.0 编译
- 编写 cin.get() 以接收字符数组时出现问题
- 作用域枚举和标准::get
- Visual Studio 2017 中的 cpprestapi 问题找不到 POST/GET 常量
- 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
- 使用"push_back"作为带有"get"函数C++的向量
- 使用 cin.get 读取字符数组
- 如何使用 fstream 的 .get 字符串?
- std::get like (partial) template specialization
- 从 unique_ptr::get 发送指针作为指针引用进入函数
- addr2line get 行号始终返回 0