在C ++类中构造的模板类型对象

时间:2017-04-13 22:26:30

标签: c++ templates constructor

我该怎么办?我想创建一个C类对象并使用参数。详细说来,这里的错误是编译器将其读作转换,而不是创建带参数的对象。

编辑:对于那些仍然不理解的人,foobar是无关紧要的。我已将其删除,因为如果没有该功能,错误仍会发生。

// define foobar else where
template <class C>
class Dummy {
    void foo(int bar) {
        C dumdum = C(bar); // Error - '<function-style-cast>': cannot convert from initializer-list to 'C'
    }
}

3 个答案:

答案 0 :(得分:0)

  

这对我有什么帮助?

您可以使foo成为一个接受参数包的函数模板,使其成为通用的。

示例程序:

#include <iostream>
#include <sstream>
#include <string>

template <class C>
class Dummy {
   public:
      template <typename... Args>
         void foo(Args... args ) {
            foobar(C(args...)); 
         }
};

struct Foo
{
   Foo(int, int) {}
};

struct Bar
{
   Bar(int) {}
};

struct Baz
{
};

void foobar(Foo)
{
   std::cout << "In foobar(Foo)\n";
}

void foobar(Bar)
{
   std::cout << "In foobar(Bar)\n";
}

void foobar(Baz)
{
   std::cout << "In foobar(Baz)\n";
}

int main()
{
   Dummy<Foo>().foo(10, 20);
   Dummy<Bar>().foo(10);
   Dummy<Baz>().foo();
}

输出:

In foobar(Foo)
In foobar(Bar)
In foobar(Baz)

答案 1 :(得分:0)

你有没有试过像:

C dumdum(bar);

或者:

C dumdum{bar};

答案 2 :(得分:0)

class C {
public:
    C(int a) {}
};

template <class C>
class Dummy {
public:
    void foo(int bar) {
        C dumdum = C(bar); 
    }
};

int main() {
    Dummy<C> dummy;
    dummy.foo(2);
    return 0;
}

我没有看到任何错误。