Załóżmy, że mam zestaw funkcji i klas, które są szablonem do używania precyzji pojedynczej (float
) lub double
. Oczywiście mógłbym napisać tylko dwa kawałki kodu bootstrap lub bałagan z makrami. Ale czy mogę zmienić argument szablonu w czasie wykonywania?Wybierz argument szablonu w czasie wykonywania w C++
Odpowiedz
Nie, nie można przełączać argumentów szablonu w czasie wykonywania, ponieważ szablony są tworzone przez kompilator podczas kompilacji. Co ty może zrobić, to mieć oba szablony wywodzą się ze wspólnej klasy bazowej, zawsze użyć klasy bazowej w kodzie, a następnie zdecydować, który pochodzi klasę używać w czasie wykonywania:
class Base
{
...
};
template <typename T>
class Foo : public Base
{
...
};
Base *newBase()
{
if(some condition)
return new Foo<float>();
else
return new Foo<double>();
}
Makra mają ten sam problem jak szablony, ponieważ są one rozwijane podczas kompilacji.
Szablony są mechanizmem kompilacji. BTW, makra są również (ściśle mówiąc - mechanizmem przetwarzania wstępnego - który pojawia się nawet przed kompilacją).
Szablony są wyłącznie kompilacją, kompilator rozwinie szablon i utworzy klasę/funkcję z określonym argumentem i bezpośrednio przetłumaczy go na kod.
Jeśli próbujesz przełączać się między foo<float>
i foo<double>
w czasie wykonywania, będziesz musiał użyć sztuczki metaprogramowania lub po prostu mieć osobne ścieżki dla każdego z nich.
- 1. Uzyskiwanie typu szablonu w czasie wykonywania
- 2. Skompiluj rozszerzenie kodu C# w czasie wykonywania
- 3. C++ Przypisywanie wartości stałej w czasie wykonywania?
- 4. Awaria OCMock w czasie wykonywania
- 5. std :: set wybierz mniej lub więcej komparatora w czasie wykonywania
- 6. Zbuduj C# Ogólne definicje typu w czasie wykonywania
- 7. Ładowanie XAML w czasie wykonywania?
- 8. metoda wywołania w czasie wykonywania
- 9. Powielanie składników w czasie wykonywania
- 10. Jak sprawdzić typ zmiennej w C w czasie wykonywania?
- 11. Znajdź div w czasie wykonywania po stronie serwera w C#
- 12. Wykrywanie możliwości biblioteki w czasie wykonywania w C
- 13. W jaki sposób GDB ocenia wyrażenia C++ w czasie wykonywania
- 14. C++ szablonu argument, który już jest „znany”
- 15. knockout.js ładowanie szablonów w czasie wykonywania
- 16. Generowanie zespołu DLL dynamicznie w czasie wykonywania
- 17. Jak zmienić lokalizację strony w czasie wykonywania
- 18. Renderowanie obrazu w czasie wykonywania w WPF
- 19. Żądanie uprawnień administratora w czasie wykonywania
- 20. C# WPF dodać kontrolę do okna głównego w czasie wykonywania
- 21. Objective-C: Jak zmienić klasę obiektu w czasie wykonywania?
- 22. C#: Jak dodać atrybuty do obiektu w czasie wykonywania?
- 23. Dynamiczne tworzenie listy argumentów funkcji C++ w czasie wykonywania
- 24. Używanie pamięci C# app w czasie wykonywania ankiety?
- 25. C# Tworzenie nieznanego generycznego typu w czasie wykonywania
- 26. Zmienianie wartości makra w czasie wykonywania
- 27. Jak pozbyć się LD_LIBRARY_PATH w czasie wykonywania?
- 28. Uruchamianie skompilowanego kodu Java w czasie wykonywania
- 29. C++ szablonu: Jak umieścić nietypowe ograniczenia w czasie
- 30. wykrywanie typedef w czasie kompilacji (metaprogramming szablonu)