Zdravím.
Stává se mi, že když napíšu něco na blog o programování, odněkud se vyrojí spoustu znalců normy, kteří ji znají zpamětí i po zpátku a hned vědí, co jsem udělal špatně, co řeší lépe std knihovna, se skrytým odkazem "nauč se pořádně normu a standardní knihovnu, než sem něco napíšeš". Upřímě tyto znalce obdivuju, protože mají čas ty stohy dokumentace studovat. A proto je teď moc prosím o pomoc.
Potřebuji toto:
Mám šablonu klasicku
template<typename T> void foo(...)
. Předpokládá se, že uživatel šablony T explicitně určí, například
foo<int>(...)
nebo
foo<int &&>(...)
A nyní hledám v std něco, co mi z T udělá typ vhodný pro předání argumentu. Dle nějakých směrnic se doporučuje aby
- Pouze jednoduché typy předávat hodnotou
- Složite typy lépe předávat const referenci
- Samotné refernece předávat tak jak jsou
- Pointery jakbysmet
Takže bych to viděl že.
T -> const T &
const T & -> const T &
T & -> T &
T && -> T &&
T * -> T *
scalar<T> -> T
Já si tohle dokážu samozřejmě napsat pomocí částečných specializací. Ale nechce se mi věřit, že ve standardní knihovně nic takového není. Ať hledám jak hledám, nic nemůžu najít. Pomůžete mi? Zase nechci vypadat jako někdo, kdo nemá nastudováno.
PS: Forward to není. Forward je funkce, já potřebuju typ.
Dík.