网站每天点击量多少好,wordpress 中文语言包,昌乐做网站,php网站开发环境一原文
新的索引式访问方式
当前,要定义一个参数包变量,需要借助std::tuple;要索引式访问参数包元素,需要借助std::get和std::tuple_element;要解包,需要借助std::apply. 而借助这些新的特性,以后可直接写出此代码:
template typename... Ts
class Tuple {
public:con…原文
新的索引式访问方式
当前,要定义一个参数包变量,需要借助std::tuple;要索引式访问参数包元素,需要借助std::get和std::tuple_element;要解包,需要借助std::apply. 而借助这些新的特性,以后可直接写出此代码:
template typename... Ts
class Tuple {
public:constexpr Tuple(Ts... ts): elems(std::forwardTs(ts))...{ }template size_t Iauto get() const- Ts...[I] const {return elems...[I]; //包索引}
private:Ts... elems; //可变包
};
template size_t I, typename... Ts
struct std::tuple_elementI,TupleTs...{using type Ts...[I]; //包索引
};
int main() {Tupleint, char tup(1, c);return tup.get0();
}该实现元组的方式借助了包索引和变量包(尚未入标准),它比ReflectionforC中介绍的反射方式还要直接了当,是最简洁的实现方式.
语法解析
深思熟虑过后,最终包索引的语法为:
包名 ... [常表达式]这样可直接访问指定位置的参数包,示例:
template typename... T
constexpr auto first_plus_last(T... values) - T...[0] {return T...[0](values...[0] values...[sizeof...(values)-1]);
}
static_assert(first_plus_last(1,2,10) 11 );T...[N]针对的是类型,而values...[N]针对的是值.参数包的首位元素加末位元素,返回一个编译期常量值.
尚未完善 虽然包索引已进C,但还未完善.更多见原文!