Na úvod len spomeniem že používam najnovšiu verziu C++ kompilátr čisatočne podporuje C++ 20, ktorá ešte tuším ani neni hotová, ale niektoré časti normy sú už známe a všetky najrzšírenejšie C++ kompilátory ju do určitej miery podporujú... To čo tu rozoberám je súčasťou C++ 20... a teraz k veci.
Mám takýto typ:
struct FileTimesInfo
{
const __time64_t LastAccessTime;
const __time64_t LastModificationTime;
const __time64_t LastStatusChangeTime;
};
ktorý vieme inicializovať takto (namiesto núl si tam doplnte hodnoty aké chcete):
auto ti = FileTimesInfo{ .LastAccessTime = 0, .LastModificationTime = 0, .LastStatusChangeTime = 0 };
keď ale typu pridám nejaký konštruktor napr.
struct FileTimesInfo
{
const __time64_t LastAccessTime;
const __time64_t LastModificationTime;
const __time64_t LastStatusChangeTime;
FileTimesInfo(struct _stati64 stat) :
LastAccessTime(stat.st_atime),
LastModificationTime(stat.st_mtime),
LastStatusChangeTime(stat.st_ctime)
{
}
};
Tak sa dá inicializovať len cez ten nadefinovaný konštruktor. Ale už ho neviem inicializovať tak ako pred tým:
auto ti = FileTimesInfo{ .LastAccessTime = 0, .LastModificationTime = 0, .LastStatusChangeTime = 0 };
Prečo to tak je? a ako tento problém napraviť tak aby som mohol inicializovať triedu oboma spôsobmi? Aj cez custom konštruktor aj cez inializátor? Teraz si len domýšlam... moj predpoklad je že keď v C++ nenadefinujem žiadny konštruktor C++ nadefinuje nejaký implicitný defaultný konštruktor, ktorý umožňuje atribúty inicializovať priamo cez inicializátor. keď ale explicitne nadefinujem konštruktor prídem o ten implicitný ktorý C++ vytvára automaticky. Ako teda triede definovať custom konštruktor pričom nechcem prísť aj o tú formu priamej inicuializácie cez membery? Vopred ďakujem za vysvetlenie.