我有這樣的宏定義,可以輕鬆地創建一個shared_ptr的一類:的typedef在預處理宏
#define create_ptr(__TYPE__) typedef std::shared_ptr<__TYPE__>
我想現在是追加「PTR」的類名,使
create_ptr(MyClass)
會導致一個名爲MyClassPtr
爲std::shared_ptr<MyClass>
我將如何做到這一點typedef
?
我有這樣的宏定義,可以輕鬆地創建一個shared_ptr的一類:的typedef在預處理宏
#define create_ptr(__TYPE__) typedef std::shared_ptr<__TYPE__>
我想現在是追加「PTR」的類名,使
create_ptr(MyClass)
會導致一個名爲MyClassPtr
爲std::shared_ptr<MyClass>
我將如何做到這一點typedef
?
你需要令牌串聯##
#define create_ptr(__TYPE__) typedef std::shared_ptr<__TYPE__> __TYPE__ ## Ptr;
class Foo{
public:
};
create_ptr(Foo)
FooPtr foo;
詳細解釋看看這裏https://gcc.gnu.org/onlinedocs/cpp/Concatenation.html
是的,想通了:)非常感謝! – defense2000x
另一種途徑是使用聲明:
template <typename T>
using sp = std::shared_ptr<T>;
sp<int> my_shared_int_pointer ....
開始用兩個低線的名稱被保留爲實施。 –
而不是使用宏爲什麼不使用'auto'。然後你可以使用'auto foo = make_shared(params_if_needed);'。現在,您沒有宏,並且該對象在創建時被初始化爲有效狀態。 –
NathanOliver
@KerrekSB所以我不能使用'__TYPE__'?我還會用什麼來代替'__TYPE__'? – defense2000x