Вызов функции в качестве параметра без скобок

У меня есть код, который мне не разрешено изменять:

Jd const nowJD( WTIMEOFDAY );
Jd const nowJDN( NOTIMEOFDAY );

В файле модульного теста нет упоминаний о WTIMEOFDAY или NOTIMEOFDAY. Я должен определить их где-то.

Я строю некоторые юлианские даты, и мне нужно иметь возможность вызывать функцию, используя только WTIMEOFDAY или NOTIMEOFDAY. Оба из них должны возвращать юлианскую дату или юлианский номер дня. Я не могу использовать параметры или скобки в моем вызове.

Это одно из объявлений функций:

jd_t NOTIMEOFDAY();

Это его определение:

jd_t Jd::NOTIMEOFDAY() {
time_t nowTime = time(NULL);
struct tm tmNow;
localtime_s(&tmNow, &nowTime);
jd_ = gregorian_to_jd(
tmNow.tm_year + 1900,
month_t(tmNow.tm_mon + 1),
day_t(tmNow.tm_mday)
);
}

Это код из тестового примера с использованием WTIMEOFDAY и NOTIMEOFDAY:

BOOST_AUTO_TEST_CASE( test_Jd_ctor_default_no_time_of_day ) {
time_t utcTime = time(NULL);
struct tm tmLocal;
localtime_s( &tmLocal, &utcTime );
Jd const nowJD( WTIMEOFDAY );
Jd const nowJDN( NOTIMEOFDAY );

jd_t jdn = gregorian_to_jd( tmLocal.tm_year + 1900, month_t( tmLocal.tm_mon + 1 ), day_t( tmLocal.tm_mday ) );
BOOST_CHECK_EQUAL( nowJDN.jd(), jdn );

jd_t jd = gregorian_to_jd(
tmLocal.tm_year + 1900, month_t(tmLocal.tm_mon + 1), day_t(tmLocal.tm_mday),
hour_t(tmLocal.tm_hour), minute_t(tmLocal.tm_min), second_t(tmLocal.tm_sec) );
BOOST_CHECK_EQUAL( nowJD, jd );
}

Как я могу сделать так, чтобы NOTIMEOFDAY и WTIMEOFDAY указывали на функцию, которая будет возвращать текущий номер дня в Юлиане и дату в Юлиане, соответственно. Я только когда-либо вызывал функцию, используя формат foo ().

Это определение конструктора Jd:

Jd( jd_t jd ) : jd_( jd ) { }

-2

Решение

Вам нужно будет использовать

#define NOTIMEOFDAY Jd::now()

А затем переименуйте свою функцию соответственно.

Это тот тип хакерства, для которого были разработаны макросы C. Иногда нет более элегантного решения.

0

Другие решения

Я не уверен, что это именно то, что хотел Гарт, но я сделал WTIMEOFDAY constexpr определяется как char = 'a' и сделал специальный конструктор, который принимает char отмечает и создает его с временем дня или без него на основе значения флага.

0

По вопросам рекламы [email protected]