2017-04-13 58 views
-1

我該如何做這樣的事情?我想創建一個類C的對象並使用參數。詳細說明,這裏的錯誤是編譯器將其讀爲轉換,而不是使用參數創建對象。類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

你看過[variadic模板和參數包](http://en.cppreference.com/w/cpp/language/parameter_pack)嗎? –

+0

這對我有幫助嗎? –

+0

這似乎不是有效的C++,foobar沒有在任何地方聲明。 – Vality

回答

0

這對我有幫助嗎?

您可以使foofoo函數模板接受參數包以使其通用。

示例程序:

#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) 
+0

這不回答問題。 – aschepler

+0

@aschepler,OP表示*我想創建一個C類對象並使用參數。*我錯過了什麼? –

0

你有沒有嘗試過這樣的:

C dumdum(bar); 

或者:

C dumdum{bar}; 

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; 
} 

我沒有看到任何錯誤。