Say my kod wykorzystuje std :: tablicę, chciałbym zrobić:w C++, jak owinąć domyślnych nagłówków z awaryjna
pliku: tablica
#pragma once
#ifdef MY_TOOLSET_HAS_STD_ARRAY
#include <array> //recursive include here?
#else
#include <boost/array.hpp>
namespace std
{
using boost::array;
}
#endif
taki, że mój projekt może używać std :: array bez dbania o kompilator/platformę. Jednym z problemów (przynajmniej) jest to, że gdy std :: array jest dostępny, to include będzie rekursywny, kiedy to, czego naprawdę chcę (semantycznie) "będzie zawierał nagłówek, który zostałby zawarty, gdyby ten fragment nie istniał".
Wszelkie pomysły, jak to zrobić? Wiem, że ciągnięcie boost :: array do std może być również uważane za złą praktykę, więc interesują mnie również przemyślenia na ten temat.
To jest niezdefiniowane zachowanie. Użyj jednego z pozostałych. –
Dla przypadku 'tablica' Boost.TR1 powinno to zrobić właściwą rzecz. –
Jest to technicznie niezdefiniowane zachowanie polegające na umieszczaniu rzeczy w 'std', nie jest to zła praktyka (ale zanim wywołają się demony nosowe, powinno działać dobrze). Myślę, że najlepiej będzie, jeśli po prostu nazwiesz swój nagłówek czymś innym (lub umieszczasz go w innym katalogu, np. Boost). – Cameron