我在C ++ 11中有以下可变参数模板函数:
#include <functional>
template<class... T>
void Subscribe(std::function<void(T...)> handler)
{
// contents omitted
}
我可以这么称呼:
Subscribe<int>([](int value)
{
});
但我不能用空模板参数调用它(它不会在Visual Studio 2015中编译):
Subscribe<>([]()
{
});
我知道有一个类似的帖子:
但是,{@ 3}}在该帖子中没有人讨论在函数末尾使用V形符<>
作为与可变参数模板类的正确用法。
我不想通过单独声明无参数版本来复制函数体内的代码。有没有办法用空模板参数调用该方法?
答案 0 :(得分:0)
我无法明确提供零模板参数。 Subscribe<>
表示其他内容,因为在C ++之前的11天:“Subscribe
这里是模板,在重载解析期间不考虑非模板。”
可以使用
Subscribe(std::function<void()>( [](){
// ...
} ));
这依赖于模板参数推导来推导空参数列表,并阐明函数参数的类型以允许推导成功。