【问题标题】:C++ Generate with a function from a pointerC++ 从指针生成函数
【发布时间】:2013-11-07 20:53:18
【问题描述】:

stl::generate 的指针中使用方法的最佳方式是什么?一个例子:

std::vector<double> doSomethingToAVector(boost::shared_ptr<RandomGenerator> randomGen){
    std::vector<double> output(100);
    std::generate(output.begin(), output.end(), randomGen->returnANumber());
    return output;
}

RandomGenerator 只是一个任意类,其方法 returnANumber() 返回任意双精度。

我的编译器目前说

  called object type 'double' is not a function or function pointer
    *__first = __gen(); 

我应该使用mem_fun 还是其他类似的魔法?

【问题讨论】:

    标签: c++ function methods stl


    【解决方案1】:

    您可以使用std::bind() 来绑定隐式对象参数。例如:

    std::generate(output.begin(), output.end(),
                  std::bind(&RandomGenerator::returnANumber, randomGen));
    

    如果randomGenboost::shared_ptr&lt;RandomGenerator&gt;,我不知道它是否有效,但它肯定适用于std::shared_ptr&lt;RandomGenerator&gt;。这假设当前的 C++(即 2011 年的修订版)。我希望使用 C++03 与 Boost 进行类似的工作。

    【讨论】:

    • 嗨。是的,看来我需要bind 它。不应该是:std::bind(&amp;RandomGenerator::returnANumber, randomGen, std::placeholders::_1) 我不愿意使用 C++11,因为我对此一无所知,也不能保证其他人会拥有它。嗯。
    • @user2966558: std::generate() 想要使用一个空函数对象。您的表达式将创建一个一元函数,即算法需要至少传递一个参数,但它不会将任何参数传递给生成器函数。关于 C++11,我认为 Boost 有一个类似的bind(),它也可以使用指针类型作为成员函数的第一个参数。
    • @user2966558 它是 workboost::bind
    猜你喜欢
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多