写了很多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++功能。将功能用于库组件是编程语言的一种未充分利用的设计!
方便地,人们总是可以使用typedef
或using
来为用户定义的类型添加别名。
template<typename T> using Ptr = std::shared_ptr<T>;
template<typename T> using Ptrs = std::vector<std::shared_ptr<T> >; // or PtrVec
使用像$
这样的非字母数字符号不是一个好主意。