没有模板参数的变量模板函数

时间:2016-01-23 18:11:08

标签: c++ c++11

我在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形符<>作为与可变参数模板类的正确用法。

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

1 个答案:

答案 0 :(得分:0)

我无法明确提供零模板参数。 Subscribe<>表示其他内容,因为在C ++之前的11天:“Subscribe这里是模板,在重载解析期间不考虑非模板。”

可以使用

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

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