【发布时间】:2019-08-27 13:16:45
【问题描述】:
以下代码有问题。虽然 1 部分没问题,但问题在于 main() 的第二部分。在编译时,会显示一条模棱两可的错误消息。如何更改代码以解决歧义?
template<typename Arg> void func(Arg arg)
{
arg();
}
template<typename Arg, typename... Args> void func(Arg arg, Args... args)
{
func(args...);
arg();
}
template<typename Container> void func(Container & c)
{
for (typename Container::reverse_iterator i = c.rbegin(); i != c.rend(); ++i )
{
(*i)();
}
}
void f()
{
std::cout << "+" ;
}
int main()
{
//1
func(f,f,f);
//2
std::vector<std::function<void()> > v{f,f};
func(v);
}
代码链接:http://cpp.sh/3wxrc
【问题讨论】:
-
看起来你需要一些 SFINAE。定义类型特征
is_container,然后在您的1)声明中添加enable_if<!is_container<Arg>> -
我想它会起作用,但看起来有点麻烦......
标签: c++ c++11 templates overloading variadic-templates