【问题标题】:Assign a template function to boost::function将模板函数分配给 boost::function
【发布时间】:2015-03-14 03:12:28
【问题描述】:

我想做这样的玩具程序:

#include <boost/function.hpp>
#include <iostream>

template <typename T>
void func1(T& g) {
    std::cout << 1;
}

template <typename T>
void func2(T& g) {
    std::cout << 2;
}

int main() {
    boost::function<void(int)> f;
    int k;
    std::cin >> k;
    if (k == 1)
        f = func1 < int > ;
    else
        f = func2 < int > ;
}

但是这段代码不起作用,它说“operator=”不清楚。有什么方法可以做这样的事情吗?

【问题讨论】:

  • 请发布确切的错误。我在 Coliru 上 can't reproduce it
  • 对不起,错误 C2593 'operator =' is ambiguous

标签: c++ boost function-templates


【解决方案1】:

改变这个:

boost::function<void(int)> f;

到这里:

boost::function<void(int&)> f;

使其与您的功能相匹配。


在其他新闻中,C++11 标准基本上采用了boost::function 作为std::function,标头为&lt;functional&gt;

【讨论】:

  • 哦,抱歉,在原始代码中,它的类名后面有“&”...并更改它,因为您的答案在 VS 2013 中仍然出现相同的错误...
  • @XiaofanNiu:此答案中的修复回答了您发布的问题。请不要在问题中提供虚构的代码:复制和粘贴代码。显然你现在有第二个问题。单独发布。请务必包含一个完整但最小的示例供读者试用,并确保复制并粘贴该代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多