gpt4 book ai didi

c++ - 没有模板参数的可变参数模板函数

转载 作者:太空宇宙 更新时间:2023-11-04 13:21:55 25 4
gpt4 key购买 nike

我在 C++ 11 中有以下可变参数模板函数:

#include <functional>

template<class... T>
void Subscribe(std::function<void(T...)> handler)
{
// contents omitted
}

我可以这样调用它:

Subscribe<int>([](int value)
{
});

但我不能用空模板参数调用它(它不会在 Visual Studio 2015 中编译):

Subscribe<>([]()
{
});

我知道有一个类似的帖子: Calling variadic template function with no args failing , 然而,在那篇文章中没有人讨论人字形的使用 <>在函数的末尾作为可变参数模板类的正确用法。

我不想通过单独声明无参数版本来复制函数体内的代码。有没有办法用空模板参数调用方法?

最佳答案

据我所知,没有办法显式提供零模板参数。 Subscribe<>意味着其他东西,因为 C++11 天之前:“Subscribe 这是一个模板,在重载解析期间不要考虑非模板。”

可以使用

Subscribe(std::function<void()>( [](){
// ...
} ));

这依赖于模板参数推导来推导空参数列表,并阐明函数参数的类型以允许推导成功。

关于c++ - 没有模板参数的可变参数模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34966958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com