2011-08-10 55 views
0

可以將this solution轉換爲宏,以便我調用以下行:複製,const和非const,getters的宏解決方案?

CALL_CONST_FUNC(objToReturn, thisPtr)->SomeConstFunc(); 

用於返回值的函數和用於不返回值的函數。我的宏令牌技能不是很好,所以我想也許有人可以拿出一個(或者告訴我這是不可能的)。最終的目標是避免編寫醜陋的單行內容並將其替換爲易於眼睛且不易出錯的內容。

+0

這看起來不漂亮嗎?無論如何你需要多少個const重載? – UncleBens

+2

我寧願讓大量的獲得者和安裝者變得更難。 –

+0

@UncleBens:真的嗎?它可能不是很漂亮,但肯定比另一個問題解決方案中的更漂亮。 – Samaursa

回答

0

如果一個函數沒有返回一個值(引用或指針),你首先需要const重載嗎?看起來有兩個的唯一原因是從類中獲取const或非const引用。否則,單獨的const版本應該足夠了。

至於使成語更甜,怎麼約了幾個模板助手,而不是爲你做類型推導:

template <class T> 
const T& add_const(T& t) { return t; } 

template <class T> 
T& remove_const(const T& t) { return const_cast<T&>(t); } 

class Foo 
{ 
    int foo; 
public: 
    const int& get() const 
    { 
     //non-trivial work 
     return foo; 
    } 

    int& get() 
    { 
     return remove_const(add_const(*this).get()); 
    } 
}; 

的好處更大,如果該類型名稱是更長的時間。

+0

'如果一個函數沒有返回一個值(引用或指針),你是否首先需要const超載?'好點! ...我喜歡這個解決方案(+1) – Samaursa

+0

如果函數的const版本返回了應該被寫保護的東西,那麼你的意外將意外地通過拉動這個技巧使返回的任何寫入操作成爲可訪問的。 – HelloGoodbye

相關問題