2016-05-31 64 views
1

我想調用一個只接受類型爲 void put_func(T *obj)的指針的函數。我的要求是當我使用​​時,此功能取true/false並返回true/false。由於它是一個指針,我無法傳遞這些值。有什麼辦法可以達到這個目的嗎?將NULL和NON-NULL值轉換爲指針的C++

編輯: 我的基本問題是如何通過truefalse當函數採用通用指針。

編輯2:修改了問題以說清楚。

+2

什麼是「NOT-NULL」?你似乎假裝一個指針值是一個布爾變量。爲什麼? –

+0

完全不清楚給我。你爲什麼傳遞'void *'?如果不瞭解'put_func'對你提供的值做了什麼,沒有辦法回答這個問題。 – Rotem

+7

聽起來像是一個xy問題。你究竟在做什麼? – NathanOliver

回答

0

鑄造0(整型常量)到T*是安全的,並給你一個nullptr,但鑄造1並不安全。但是,你能使用任意有效的指針:

void foo() { 
    static char dummy; // static keeps the pointer valid 
    put_func(nullptr); 
    put_func(&dummy); //not the nullptr 
} 

請注意,您可能還可以做

void put_bool(bool b) { put_func(new bool(b)); } 
bool get_bool() { bool* p = get_func(); bool b = *p; delete p; return b; } 

,但我們沒有足夠的上下文來知道這是否泄漏內存。

1

它看起來像你正在試圖使用你的T*散列表模擬器來存儲bool的集合。

您不能參照文字truefalse。您需要管理一個bool變量的生命週期。

template<typename T> 
void put_func(T *obj) {} 

int main(){ 
    bool myBool = true; 
    put_func(&myBool); 
}