2013-07-14 2 views
0

Например, у меня есть простой макросЛюбой способ сохранить внутренние общие макросы?

#define MIN(a, b) (a) < (b) ? (a) : (b) 

и я хочу использовать

MIN(pow(2, 3) , 10); 

Внутренняя общая нестабильно. Я могу сделать следующим образом

int a = pow(2, 3); 
MIN(a, 10); 

Ищу лучший способ, который более доступен для чтения, как держать pow(2, 3) в макросе? Является ли это возможным? Благодаря!

+2

Я бы сказал, «Не использовать макросы» – Rapptz

ответ

4

Вы можете использовать std::min вместо:

#include <algorithm> 

//... 
double x = std::min(pow(2, 3) , 10); 

Как правило, вы должны предпочитать функцию инлайн над макросом. Если цель макроса состоит в том, чтобы позволить ему работать для разных типов, вы можете использовать шаблон.

template <typename T> 
inline T SomeFunction (T x, T y) { 
    T result; 
    //...do something with x and y and assign to result 
    return result; 
} 
+0

Может даже сделать свой собственный 'min' как функцию, если вы не хотите, чтобы включить' algorithm'. – Rapptz

+0

@Rapptz: Верно, я расширил ответ. – jxh

Смежные вопросы