2017-07-31 151 views
18

是否有任何方法來實現自定義類型限定符(類似於const)?我想只允許對具有相同資格的函數進行函數調用,以獲得正確的資格。有沒有辦法構建C++自定義限定符?

比方說,我將有:

void allowedFunction(); 
void disallowedFunction(); 

//Only allowed to call allowed functions. 
void foo() 
{ 
    allowedFunction(); 
    disallowedFunction(); //Cause compile time error 
} 

//Is allowed to call any function it wants. 
void bar() 
{ 
    allowedFunction(); 
    disallowedFunction(); //No error 
} 

我想這樣做的原因是因爲我想確保函數調用上的特定線程只能調用實時的安全保護功能。由於許多應用程序都需要硬實時安全線程,因此在編譯時有一些檢測鎖的方式可以保證我們很難檢測到運行時錯誤。

+0

要爲該語言添加新關鍵字,請不要有機會(除非您能說服委員會)。您可能可以使用宏。 –

+0

我想你可能會對此感興趣:[Metaclasses:關於生成C++的思考](https://herbsutter.com/2017/07/26/metaclasses-thoughts-on-generative-c/) –

+0

也許你可以把特定頭文件中的實時安全函數聲明? – Oliv

回答

6

也許你可以把功能的一類,使類的允許那些朋友,像這樣:

#include <iostream> 

class X 
{ 
    static void f(){} 
    friend void foo(); // f() is only allowed for foo 
}; 

void foo() // allowed 
{ 
    X::f(); 
} 

void bar() // disallowed 
{ 
    //X::f(); // compile-time error 
} 

int main() 
{ 

} 

你或許可以寫一些瘋狂的宏,透明地做到這一點每一個你想要的功能允許/禁止。

+0

但是,Friending函數並不能保證我不會調用不允許的函數。這樣我們只能禁止特定的功能,不允許禁止所有功能,然後允許多個功能。我需要絕對確保不會發生鎖定。 –

+0

@AndreasLoanjoe爲了更好的控制,你需要每個類的一個函數,我猜...這就是宏變得更加容易的地方。不錯的問題,但! – vsoftco

相關問題