Как chris предложил, я бы сказал, что вы должны просто использовать tm
, а не свой собственный класс даты:
tm a{0, 0, 0, 15, 5, 2006 - 1900};
cout << put_time(&a, "%Y-hello-%d-world-%m-something-%d%d");
Если вы должны реализовать приходят пользовательские функции, которые не могут быть выполнены с помощью get_time
и put_time
тогда вы d, вероятно, хотите использовать tm
элемент как часть вашего класса, чтобы вы могли просто расширить функциональные возможности, которые уже есть:
class CDate{
tm m_date;
public:
CDate(int year, int month, int day): m_date{0, 0, 0, day, month, year - 1900}{}
const tm& getDate() const{return m_date;}
};
ostream& operator<<(ostream& lhs, const CDate& rhs){
auto date = rhs.getDate();
return lhs << put_time(&a, "%Y-hello-%d-world-%m-something-%d%d");
}
вы могли тогда использовать CDate
следующим образом:
CDate a(2006, 5, 15);
cout << "DATE IS:" << a;
EDIT:
После снова глядя на ваш вопрос, я думаю, что у вас есть неправильное представление о том, как оператор вставки работает, вы не можете передать как объект и формат: https://msdn.microsoft.com/en-us/library/1z2f6c2k.aspx
Если вы хотите, чтобы указать формат, но по-прежнему сохраняют свой CDate
класс, я снова предлагаю использовать put_time
:
cout << put_time(&a.getDate(), "%Y-hello-%d-world-%m-something-%d%d");
Если вы снова настаиваете на написание собственной функции принимающего формата вам необходимо создать вспомогательный класс, который можно построить инлайн и поддержку, с оператором вставки:
class put_CDate{
const CDate* m_pCDate;
const char* m_szFormat;
public:
put_CDate(const CDate* pCDate, const char* szFormat) : m_pCDate(pCDate), m_szFormat(szFormat) {}
const CDate* getPCDate() const { return m_pCDate; }
const char* getSZFormat() const { return m_szFormat; }
};
ostream& operator<<(ostream& lhs, const put_CDate& rhs){
return lhs << put_time(&rhs.getPCDate()->getDate(), rhs.getSZFormat());
}
Вы могли бы использовать это как следует:
cout << put_CDate(&a, "%Y-hello-%d-world-%m-something-%d%d") << endl;
Что случилось с 'std :: put_time'? – chris
@chris У OP, похоже, уже есть понятие 'put_time', поскольку он использует спецификаторы преобразования в своем заявлении о формате. Я вложил ответ с вашим предложением, но трудно божественно, если это то, что ОП предназначил вообще. –
@ JonathanMee, честно говоря, я думаю, что эти форматы довольно распространены. Довольно уверен, что я быстро проверил некоторую дату PHP («% Y.% m.% D») на днях, и я не могу вспомнить, почему. – chris