2015-04-23 35 views
0

經過大量的std::shared_ptr<myNs::MyClass>寫, 祝指針可以這樣寫:我希望std :: shared_ptr可以像MyClass @ ptr = @(new MyClass())一樣寫入;

MyClass* rawPtr = new MyClass(); // raw pointer 
[email protected] refPtr = @(new MyClass()); // std::shared_ptr 
MyClass# gcPtr = #(new MyClass()); // GC pointer, for future 

因此函數:

void CRAIIMFCApplication1View::ConsumeThreadResult(
    std::vector<std::shared_ptr<ThreadParam> > threadParamsVecPtr, 
    std::shared_ptr<CalculationResult> calculationResultPtr) 
{ 
    ... 
} 

可以在短期內這樣寫:

void CRAIIMFCApplication1View::ConsumeThreadResult(
     std::vector<[email protected]> threadParamsVecPtr, 
     [email protected] calculationResultPtr) 
{ 
    ... 
} 

有這樣的訣竅嗎?

====================== UPDATE1 ====================== ===

非常感謝@tahsmith。 現在我用的是以下typedef

template<typename T> using $ = std::shared_ptr<T>; 
template<typename T> using vector$ = std::vector<std::shared_ptr<T> >; 

的代碼可以這樣寫:

void CRAIIMFCApplication1View::ConsumeThreadResult(
     vector$<ThreadParam> threadParamPtrVec, 
     $<CalculationResult> calculationResultPtr) 
{ 
    ... 
} 
+1

你在哪裏得到這個語法? – AngryDuck

+0

'typedef'如何? 'typedef std :: vector > ThreadParamPtrs';使用SharePtrVector = STD – Jagannath

+0

或'模板 ::矢量<性病:: shared_ptr的>' – tahsmith

回答

0

std::shared_ptr是一個(標準)庫組件和您提出@是一個C++的功能。使用庫組件的功能是一種編程語言的未充分利用的設計!

方便地,人們總是可以使用typedefusing來消除用戶定義的類型。例如

template<typename T> using Ptr = std::shared_ptr<T>;

template<typename T> using Ptrs = std::vector<std::shared_ptr<T> >; // or PtrVec

使用非字母數字符號像$是不是一個好主意。

+0

祝C++將有更多的語法糖使代碼更具有可讀性。例如,在C#中,'string'不是原始類型,但可以在'switch'中使用。 – Zach

+0

@Zach,從Bjarne的Stroustrup的採訪之一,我記得他說,「在C++中如果有什麼可以實現使用庫,那麼他們避免增加了一個功能,它」。可能是爲了避免增加複雜性到已經複雜的語言語法。然而,在C++ 14/17中,我看到在這方面幾乎沒有增加,而不是關鍵字,它們添加了令牌,這在某些情況下使用時會有意義。例如C++ 11'final'和'override'不是關鍵字,但是如果在特定的上下文中使用,它們會產生一定的含義。 – iammilind

相關問題