作爲替代的例外,你還可以通過引用參數列表返回字符串,並通過返回true或false即表明sucess
bool GetWindowText(HWND handle, std::wstring& windowText)
{
const int size = 1024;
TCHAR wnd_text[size] = {0};
HRESULT hr = ::GetWindowText(handle,
wnd_text, size);
if(SUCCEEDED(hr))
{
windowText = wnd_text;
return true;
}
else
return false;
}
避免了引用參數的另一種替代方案是返回的一個實例一個包裝值的類,但也讓你知道一個值是否存在,例如
class ValueWrapper
{
public:
ValueWrapper() : present(false) {}
ValueWrapper(const std::wstring& s) : value(s), present(true) {}
bool isPresent() const { return present; }
const std::wstring& getValue() const { return value; }
private:
std::wstring value;
bool present;
};
請注意,你可以很容易地模板這個包裝。您的功能將然後是
ValueWrapper GetWindowText(HWND handle)
{
const int size = 1024;
TCHAR wnd_text[size] = {0};
HRESULT hr = ::GetWindowText(handle,
wnd_text, size);
if(SUCCEEDED(hr))
return ValueWrapper(wnd_text);
else
return ValueWrapper();
}
NULL僅用於指針。 – Alex 2011-04-30 20:49:45