一种处理连续且分段数字对象的代码框架
CANOpen协议栈中,不同的cob id段对应不同的功能,例如紧急报文、SDO、PDO等,因此可以利用如下结构进行抽象。
#include <iostream>
#include <vector>
#include <tuple>
#include <functional>
#include <utility>
template<int MIN, int MAX>
class A{
public:
A()=default;
virtual bool check(int value){return value > MIN && value < MAX;}
virtual void name()=0;
};
class B : public A<1,3>{
public:
// B()=default;
void name(){std::cout<<"B"<<std::endl;}
};
class C : public A<4,5>{
public:
void name(){std::cout<<"C"<<std::endl;}
};
template<typename T>
void exec_tuple(T t, int v){
if(t.check(v)) t.name();
}
template<class Tuple, std::size_t... Is>
void print_tuple_imple(int v, const Tuple& t, std::index_sequence<Is...>){
(exec_tuple(std::get<Is>(t), v), ...);
}
template<typename ...Args>
void print_tuple(int value, const std::tuple<Args...>&t){
print_tuple_imple(value, t, std::index_sequence_for<Args...>{});
}
int main(int argc, char** argv){
std::tuple<B,C> a;
print_tuple(2, a);
return 0;
}
程序输出:B