controlPtr クラスでチェックしているため、null の testFunc をチェックインしない次のコードがあります。代わりに、戻りたいと思います。関数に含めることができるように、テンプレートクラスに追加できるマクロのようなものを探しています。(注:例外なくオプションを探しています)。
void AssertErrorHandler(const char* file_name, unsigned line_number, const char* message) {
std::cout << message << " in file " << file_name << " #" << line_number << std::endl << std::flush;
}
#define CONTROLASSERT(condition, msg) \
if(!(condition)) { \
std::ostringstream s; \
s << msg; \
AssertErrorHandler( \
__FILE__, __LINE__, s.str().c_str() ); \
}
template <typename T>
class ControlPtr {
public:
explicit ControlPtr(T* p = NULL)
: ptr_(p) {
}
T* Get() const {
return ptr_;
}
ControlPtr<T>& operator=(T* p) {
ptr_ = p;
return *this;
}
T* operator->() const {
CONTROLASSERT(ptr_ != NULL, "Attempt to use operator -> on NULL pointer.");
return ptr_;
}
T& operator* () const {
CONTROLASSERT(ptr_ != NULL, "Attempt to use operator * on NULL pointer.");
return *ptr_;
}
private:
T* ptr_;
};
void testFunc() {
int i = 10;
ControlPtr<int> ptr(NULL); // Question: From here I should return. How can I modify controlPtr class above
// Do I use #define macro
std::cout << *ptr << std::endl;
return;
}
int main( void )
{
testFunc();
return 0;
}