我该怎么办?我想创建一个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'
}
}
答案 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;
}
我没有看到任何错误。