阅读另一个问题关于使用宏后,我在想:什么是他们好?
我很快就会看到被其他语言构造取代的一件事是减少你需要在下面输入的相关单词的数量:
void log_type( const bool value ) { std::cout << "bool: " << value; }
void log_type( const int value ) { std::cout << "int: " << value; }
...
void log_type( const char value ) { std::cout << "char: " << value; }
void log_type( const double value ) { std::cout << "int: " << value; }
void log_type( const float value ) { std::cout << "float: " << value; }
Run Code Online (Sandbox Code Playgroud)
而不是
#define LOGFN( T ) void log_type( const T value ) { std::cout << #T ## ": " << value; }
LOGFN( int )
LOGFN( bool )
...
LOGFN( char )
LOGFN( double )
LOGFN( float )
Run Code Online (Sandbox Code Playgroud)
还有其他"不可替代的"吗?
编辑:试图总结原因 - 为什么在答案中遇到; 因为那是我感兴趣的东西.主要是因为我有一种感觉,他们中的大部分是由于我们仍然在原始文本文件中编程,仍然是支持不佳的环境.
#ifdef DEBUG,平台问题)(SadSido,Catalin,Goz)__LINE__, __TIME__); 我也根据这个原因设置'字符串'(SadSido,Jla3ep,Jason S)require与include特征(#pragma once)(SadSido,Catalin)MESSAGEMAP,BOOST_FOREACH)(SadSido,fnieto)Sad*_*ido 14
#ifdef __DEBUG__);#pragma once);__FILE__和__LINE__- 替换为当前文件名和当前行;BEGIN_MESSAGE_MAP();在这里看到有趣的宏观讨论:
http://www.gotw.ca/gotw/032.htm
http://www.gotw.ca/gotw/077.htm
最有用的 - 头文件保护:
#ifndef MY_HEADER_GUARD
#define MY_HEADER_GUARD
// Header file content.
#endif
Run Code Online (Sandbox Code Playgroud)
稍后添加[ 仅限Windows ]
将类导出到DLL:
#ifdef EXPORT_MY_LIB
#define MY_API __declspec( dllexport)
#else
#define MY_API __declspec( dllimport)
#endif
Run Code Online (Sandbox Code Playgroud)
样本类:
class MY_API MyClass { ... };
Run Code Online (Sandbox Code Playgroud)
平台特定部分.
即
#ifdef WINDOWS
#include "WindowsImplementation.h"
#elif defined( LINUX )
#include "LinuxImplementation.h"
#else
#error Platform undefined.
#endif
Run Code Online (Sandbox Code Playgroud)