C++17中的deduction guide

deduction guide可以根据参数自动推导出对应的类型,这可以让我们的代码变得更加简洁,看下面的写法:

从上面的例子中可以看到隐式的deduction guide可以让我们的代码写得更加简洁,不用再写模版参数等细节了,有一种写动态语言的感觉。

除了隐式的deduction guide,还有一种显式的deduction guide,作用和隐式deduction guide差不多,也是让写法变得更简洁。下面是显式deduction guide的例子:

如果没有通过Dummy(double) -> Dummy显式地做deduction guide,我们在定义Dummy的时候是需要显式带着模版参数的。也许有人觉得就为了省掉一个模版参数却要多定义一个显式的deduction guide,似乎还变麻烦了。其实显式deduction guide主要是为了简化定义可变模版参数的变量,之前介绍过通过std::visit来访问variant, 通过auto lambda和if constexpr来访问variant的做法不是很方便,我们可以通过可变模板和显式deduction guide的来实现一个访问variant的更好的方法。

上面的例子中先通过可变模版参数的CRTP获得参数的operater(),然后通过显式的deduction guide来省去定义含可变模版参数overloaded的变量时,需指定变参类型的麻烦,让代码变得非常简洁。这里不仅仅是让代码变得简洁,还直接避免了一个难题,因为overloaded参数是lambda,它是一个匿名类型,你无法获取lambda的类型并实例化overloaded模版。

《C++17中的deduction guide》有4个想法

发表评论

Copy Protected by Chetan's WP-Copyprotect.