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



写了很多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)
{
   ...
}

有没有诀窍?

=====================

更新1 ==

===========================

非常感谢@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)
{
   ...
}
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

使用像$这样的非字母数字符号不是一个好主意。

相关内容

  • 没有找到相关文章

最新更新