【问题标题】:How to return a value without a function call?如何在没有函数调用的情况下返回值?
【发布时间】:2013-06-13 20:25:13
【问题描述】:

我想创建这样的值:(我必须使用以下语法)。所以目标是通过 STL 函数 generate_n 和作为模板函数的仿函数类“Sequencegenerator”创建值。我的问题是,我不知道如何返回值以及如何将其保存到下一次调用。下面是我的代码...非常感谢! (我必须不使用运算符()来解决它

// Numbers from 1 to 10
generate_n(ostream_iterator<int>(cout, " "), 10, SequenceGenerator<int>(1));
cout << endl;
// Numbers from 10 to 1 (descending order)
generate_n(ostream_iterator<int>(cout, " "), 10, SequenceGenerator<int>(10, -1));
cout << endl;
// Numbers from 0 to 5 (increment 0.5)
generate_n(ostream_iterator<double>(cout, " "), 11, SequenceGenerator<double>(0, 0.5));
cout << endl;
// Letters from A to Z
generate_n(ostream_iterator<char>(cout, ""), 26, SequenceGenerator<char>(’A’));
cout << endl;

我的代码:

#include <algorithm>
#include <iterator>
#include <iostream>
#include "SequenceGenerator.h"

using namespace std;

template <typename T>
class SequenceGenerator : public std::unary_function<T,T>
{
public:
    SequenceGenerator(T const start, T const inc):mStart(start),mInc(inc)
    {
        return mStart = mStart + inc;
    }

private:
    T const mInc;
    static T mStart;    //static T mStart
};



int main()
{
    generate_n(ostream_iterator<int>(cout, " "), 10, SequenceGenerator<int>(10,1) );


    return 0;
}

【问题讨论】:

  • 我很确定 static 不是你想要的……
  • 还有,为什么要避开operator()
  • 这应该是编译时生成的吗?
  • 你不能在这里避免operator (),因为这是generate_n函数在你的SequenceGenerator模板实例上调用的。
  • 这看起来不像是编译...而且,它看起来像家庭作业。

标签: c++ class return


【解决方案1】:

你不能在这里避免operator (),因为这是std::generate_n函数在你的SequenceGenerator模板实例上调用的。

可以使用的模板实现如下所示:

template <typename T>
class SequenceGenerator
    : public std::unary_function<T,T>  // This is superfluous for this usage
{
public:
    SequenceGenerator(T const start, T const inc = 1)
        : mStart (start)
        , mInc (inc)
    {
    }

    T operator () ()
    {
        T ret = mStart;
        mStart += mInc;
        return ret;
    }

private:
    T const mInc;
    T mStart;
};

【讨论】:

    猜你喜欢
    • 2016-07-16
    • 2021-12-05
    • 2015-10-04
    • 2017-06-26
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多