在阅读如何在运行时访问元组元素时,我想到了以下使用运行时索引获取元组元素的实现
我自己用GCC11.2试过了。我调用了API来检索元组,但出现了以下错误
找到下面的代码(实时演示)
#include <tuple>
#include <utility>
#include <type_traits>
#include <stdexcept>
template<
typename Tuple,
typename Indices=std::make_index_sequence<std::tuple_size<Tuple>::value>>
struct runtime_get_func_table;
template<typename Tuple,size_t ... Indices>
struct runtime_get_func_table<Tuple,std::index_sequence<Indices...>>{
using return_type=typename std::tuple_element<0,Tuple>::type&;
using get_func_ptr=return_type (*)(Tuple&) noexcept;
static constexpr get_func_ptr table[std::tuple_size<Tuple>::value]={
&std::get<Indices>...
};
};
template<typename Tuple,size_t ... Indices>
constexpr typename
runtime_get_func_table<Tuple,std::index_sequence<Indices...>>::get_func_ptr
runtime_get_func_table<Tuple,std::index_sequence<Indices...>>::table[std::tuple_size<Tuple>::value];
template<typename Tuple>
constexpr
typename std::tuple_element<0,typename std::remove_reference<Tuple>::type>::type&
runtime_get(Tuple&& t,size_t index) {
using tuple_type=typename std::remove_reference<Tuple>::type;
if(index>=std::tuple_size<tuple_type>::value)
throw std::runtime_error("Out of range");
return runtime_get_func_table<tuple_type>::table[index](t);
}
int main() {
std::tuple<int ,char,float> t;
auto a = runtime_get(t,0);
}
示例代码可以重写。因为在C中不可能有多个返回类型,所以您必须通过作为参数传递的lambda函数来获取它。这家伙在评论中也提到了同样的方法
#include <tuple>
#include <utility>
#include <type_traits>
#include <stdexcept>
template<
typename Tuple,
typename F,
typename Indices=std::make_index_sequence<std::tuple_size<Tuple>::value>>
struct runtime_get_func_table;
template<typename Tuple, typename F, size_t I>
void applyForIndex(Tuple& t, F f) {
f(std::get<I>(t));
}
template<typename Tuple, typename F, size_t ... Indices>
struct runtime_get_func_table<Tuple,F,std::index_sequence<Indices...>>{
using FuncType = void(*)(Tuple&, F);
static constexpr FuncType table[]={
&applyForIndex<Tuple, F, Indices>...
};
};
template<typename Tuple, typename F>
void runtime_get(Tuple& t,size_t index, F f) {
using tuple_type=typename std::remove_reference<Tuple>::type;
if(index>=std::tuple_size<tuple_type>::value)
throw std::runtime_error("Out of range");
runtime_get_func_table<tuple_type, F>::table[index](t, f);
}
int main() {
std::tuple<int ,char, float> t(10, 's', 10.2);
runtime_get(t, 0, [] (auto& v) {
// Do something v = get<0>(t);
});
}
问题内容: 在n = 5和k = 3的情况下,以下循环将执行此操作 但是效率不高,我想使用Banker的序列来完成,因此先探索单例,然后研究配对,然后研究三元组再停止。 我没有找到一种方法,但是至少此循环应该更有效: 还有:但是k个嵌入式循环看起来很丑 问题答案: 即使k个嵌入式循环看起来很丑,这也应该是最有效的方法
主要内容:JavaTuples 获取元组值的方法,JavaTuples 获取元组值方法的特征,JavaTuples 获取元组值的示例JavaTuples 获取元组值的方法 元组具有 getValueX() 方法来获取值,而 getValue() 是一种通过索引获取值的通用方法。例如 Triplet 类具有以下方法。 getValue(index) :从 0 开始返回索引处的值。 getValue0() : 返回索引 0 处的值。 getValue1() : 返回索引 1 处的值。 getValu
我在运行selenium TestCases时收到以下错误。使用版本Firefox45和selenium-server-standalone 2.52。
这是我的问题。 我有一个像这样的简单表格(示例): null null 并且我正在尝试列的名称,同时单击元素。 我想这可能是一个简单的解决办法但我找不到。 提前致谢
问题内容: 为了在控制台中进行调试,React中是否有任何机制可以使用DOM元素实例来获取支持的React组件? 先前已经在生产代码中使用此问题时询问过此问题。但是,我的重点是用于调试目的的开发版本。 我熟悉React的Chrome调试扩展,但是并非在所有浏览器中都可用。结合使用DOM Explorer和控制台,可以很容易地使用“ $ 0”快捷方式来访问有关突出显示的DOM元素的信息。 我想在调试
我能够使用以下代码成功加载基于XML的属性文件: 我的财产文件代码 但是,当我运行这个时,我得到以下异常: 引起:org.xml.sax.SAXParseExc0019:元素类型属性的内容必须匹配(注释?,条目*)。在org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseExc0019(未知来源)在org.apache.xerces.ut