首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++自动检测模板参数?

C++自动检测模板参数?
EN

Stack Overflow用户
提问于 2011-06-15 22:45:09
回答 2查看 7.2K关注 0票数 17

我正在尝试定义一个像任务农场一样的递归结构。在这里,我正在尝试两个操作数,它们可以递归地工作于任意数量的操作数,因为它可以嵌套自己。

template <typename T1, typename T2>
class Farm
{
  private:
    T1 *task1;
    T2 *task2;
  public:
    // save them so that I can use them when invoking call operator
    Farm(T1 *_t1, T2 *_t2): task1(_t1), task2(_t2) { }

    void operator()()
    {
      // invoke call operator, meaning a farm could be a task (arbitrary nesting)
      (*task1)();
      (*task2)();
    }
};
int main()
{
    ... create two pointer(A *a, B *b...)
    Farm(a,b); // error: missing template arguments before ‘(’ token

    Farm<A, B>(a,b); // in this works, it works
}

问题在于模板参数的自动检测,在这种情况下不起作用。我做错了什么,我怎样才能实现这个模板参数的隐式检测,通过gcc编译器。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2011-06-15 22:51:00

通常的解决方法是提供一个返回实际实现的模板函数。例如,在std::make_pair中,标准C++库使用了很多这样的东西。

示例:

template<typename T>
struct foo_t {
    ...
};

template<typename T>
foo_t<T> foo(T const &f) {
    return foo_t<T>(f);
}

这是因为对于函数,编译器可以从参数列表中推断出类型名。

票数 4
EN

Stack Overflow用户

发布于 2011-06-15 22:53:33

您可以为类Farm添加一个基类:

class FarmBase
{
  public:
    virtual ~FarmBase(){}

    virtual void operator()() = 0;
};


template <typename T1, typename T2>
class Farm : public FramBase
{
  private:
    T1 *task1;
    T2 *task2;
  public:
    // save them so that I can use them when invoking call operator
    Farm(T1 *_t1, T2 *_t2): task1(_t1), task2(_t2) { }
    virtual ~Farm(){}

    virtual void operator()()
    {
      // invoke call operator, meaning a farm could be a task (arbitrary nesting)
      (*task1)();
      (*task2)();
    }
};
template< typename A, typename B >
FarmBase* Create( A *a, B *b )
{
  return new Farm< A, B >( a, b );
}

然后main看起来像这样:

int main()
{
    //... create two pointer(A *a, B *b...)

    FarmBase *fobj = CreateFarm( a, b );
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6359592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档