17和18讲可以说,真是劝退不少非c++读者吧。。。
个人认为,如果不是需要写库,这两节的内容应该用得也不多吧。
作为一名图形工作者,我看这些东西,其实是因为好多图形库(说的就是你,CGAL)都是模板代码,看得眼疼。。。
实用更优先。当然,理解这些这几讲的内容还是很有帮助的。
顺便说一句,留言区贴代码实在是太费劲了。。。极客时间不好好搞搞Markdown回复格式么?好多问题还要贴代码的,有的就是挺长的。。
试着回答一下问题:
1. compose不带任何参数,
template<class... Args>
auto compose() {
return [](auto&&... args) { return compose<Args...>(); };
}
关于不带参数的意义,我理解的是,没有参数,那么就没有要执行的操作,那么就什么都不执行,返回个空。再深挖掘我就想不到了。。。这里我是为了形式上的统一,返回了一个依然什么都不做的自身。
2. 想不到其他方法。。要再预编译阶段就展开256个数值。。我还是等等答案吧。。
3. 自己实现是不可能的。这辈子都不可能。之前我看别人的代码,有通过借助写了一个辅助的PushBack操作来实现。这个自然不是我原创,拿来主义:
template <class T, T... Ints>
struct integer_sequence {};
template <size_t... Ints>
using index_sequence = integer_sequence<size_t, Ints...>;
template <size_t, typename T>
struct push_back{};
template <size_t N, size_t... Ints>
struct push_back<N, index_sequence<Ints...>> {
using type = index_sequence<Ints..., N>;
};
template <size_t N>
struct index_sequence_helper {
using type = typename push_back<N-1, typename index_sequence_helper<N-1>::type>::type;
};
template <>
struct index_sequence_helper<1> {
using type = index_sequence<0>;
};
template <size_t N>
using make_index_sequence = typename index_sequence_helper<N>::type;
展开
作者回复: 如果极客时间要支持留言用 Markdown,恐怕也得是可选的,否则有些不用 Markdown 的就要晕菜了……倒是长度限制有点妨碍贴代码。
1. 代码对。
意义回头我再说。别人的代码我就不评价了。反正这个最后我会贴个参考答案。