2015-04-23 32 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

相关问题