在 C++11 中,可以使用以下方式来替代 C++17 中的展开包语法:

template <typename T, typename... Args, std::size_t... Is>
void assign_values(T& j, const std::tuple<Args...>& obj, std::index_sequence<Is...>) {
    using swallow = int[]; // 需要一个额外的变量,用于展开包
    (void)swallow{0, (void(j[std::get<Is>(obj)] = std::get<Is>(obj)), 0)...}; // 使用逗号表达式来执行多个语句
}

template <typename T, typename... Args>
void assign_values(T& j, const std::tuple<Args...>& obj) {
    assign_values(j, obj, std::index_sequence_for<Args...>{}); // 使用std::index_sequence来展开包
}

使用示例:

std::tuple<int, std::string, double> obj(42, 'example', 3.14);
std::map<std::string, boost::any> j;
assign_values(j, obj);

这样就可以在 C++11 中模拟 C++17 的展开包语法。

C++11 实现 C++17 展开包语法示例

原文地址: https://www.cveoy.top/t/topic/pdQh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录