我希望std :: shared_ptr可以写成MyClass @ ptr = @(new MyClass());

时间:2015-04-23 10:02:56

标签: c++11 smart-pointers

写完了很多std::shared_ptr<myNs::MyClass>之后 我希望指针可以写成:

MyClass* rawPtr = new MyClass(); // raw pointer
MyClass@ 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<ThreadParam@> threadParamsVecPtr,
        CalculationResult@ 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 个答案:

答案 0 :(得分:0)

std::shared_ptr是(标准)库组件,您建议将@作为C ++功能。使用库组件的功能是一种编程语言的未充分利用的设计!

方便的是,可以始终使用typedefusing来区分用户定义的类型。 e.g。

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

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

使用非$之类的非字母数字符号不是一个好主意。