2013-07-06 60 views
1

我有一些代碼需要函數指針,但我需要用 做的「new T(x,y,z)」來調用它。作爲函數的新T(x,y,z)

我可以寫的線沿線的一個功能:

template<T, X, Y, Z> 
T* Construct(X x, Y y, Z z) { 
    return new T(x, y, z); 
} 

但我不知道這樣的事情在STL已經存在,因爲我需要爲不同的參數個數做到這一點,這需要重複上述比如說10次,每個參數數量一次,我想避免在頭文件中添加這麼多的樣板文件。

回答

3

在C++ 11可以使用可變參數模板:

template<typename T, typename... Args> 
T* Construct(Args&&... args) 
{ 
    return new T(std::forward<Args>(args)...); 
} 

此外,考慮是否真的想返回原始指針,而不是一個智能指針(例如,一個unique_ptr除非你。做低層次的東西,使用擁有原始指針不鼓勵在現代C++

+0

,當然,'返回的std :: make_ <獨特/莎爾ed>(std :: forward (args)...);' – chris

+0

謝謝,那種作品,但不像我預想的那樣。如果這個確切的功能已經存在於STL中,我仍然很好奇。你的解決方案對我來說不適用的原因是我沒有(但)被允許在我的代碼庫中使用可變參數模板。如果這個函數已經在STL中,我可以使用它。 – user2557021

+0

@ user2557021:那麼你可能要考慮Kerrek的解決方案 –

3

我相信這是個什麼標準分配的作用:。

#include <memory> 

std::allocator<T> alloc; 

T * p = alloc.allocate(1); 
alloc.construct(p, x, y, z); 
+0

謝謝。看到我對Andy的解決方案的評論。這有效,除了我需要一個這樣做的函數,它必須是一個可變模板。我只能使用STL中已經存在的一個函數或方法。這聽起來好像沒有一個。 – user2557021

相關問題