【问题标题】:Generic template argument in template function模板函数中的通用模板参数
【发布时间】:2018-06-02 01:21:55
【问题描述】:

我有一个模板类,它有一个 -template- 函数,它接受与第一个参数相同的类的指针,例如:

template<class T>
class Foo{
    void f(Foo* foo){}
}

当我在我的主函数中使用它时,一切似乎都在工作,直到我为参数使用不同的模板。

int main(){
    Foo<double> f1;
    Foo<double> f2;
    f1.f(&f2); //No errors;

    Foo<bool> f3;
    f1.f(&f3);//Error : No matching function to call to Foo<double>::f(Foo<bool>*&)
}

显然,这里定义的唯一函数是Foo&lt;T&gt;::f(Foo&lt;T&gt;*)

有什么方法可以定义f,它采用“通用”模板Foo 指针,以便我可以将它与任何其他类型一起使用?

【问题讨论】:

    标签: c++ function class templates pointers


    【解决方案1】:

    Foo 本身的定义中使用符号Foo 相当于说Foo&lt;T&gt;。如果您想支持Foo 的任何其他实例化,请将f 设为模板函数:

    template <class T>
    class Foo {
        template <class U>
        void f(Foo<U>* foo) { }
    };
    

    【讨论】:

    • 好的,如果我想在我的类中有一个指向另一个 Foo 对象的指针,它不是 T 类型的?
    • @elirovi 使用基类、void、any 或不使用。你有一个 X/Y 问题。
    • @Elirovi:这是一个单独的问题。这个指针会成为成员变量吗?在这种情况下,Foo 需要从 FooBase 派生,并且指针指向 FooBase。是局部变量吗?在这种情况下,你需要让它成为你指向的任何类型的 Foo 的指针。
    • @MartinBonner 抱歉,我对模板有点陌生,你们能给我举个例子吗?
    • @Elirovi:您需要提出一个新问题,解释您要解决的问题是什么(不仅仅是“我如何获得指向 Foo 的指针”),并显示我们举一个你迄今为止如何尝试解决它的例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2011-05-27
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多