Erkennen Sie, ob eine Funktionsvorlagenspezialisierung vorliegt, und geben Sie einen Funktionszeiger auf eine gültige ImC++

Programme in C++. Entwicklerforum
Anonymous
 Erkennen Sie, ob eine Funktionsvorlagenspezialisierung vorliegt, und geben Sie einen Funktionszeiger auf eine gültige Im

Post by Anonymous »

Ich habe ein Projekt, bei dem ich Funktionsvorlagen verwende, damit Benutzer Funktionspezialisierungen zum Kompilieren von Zeiten ausgetauscht haben. Daher gibt es eine Standardversion in einer Bibliothek mit gemeinsamem Code und einer optionalen benutzerbereiteten Spezialisierung für ein bestimmtes Unterprojekt. Zeilen: < /p>

Code: Select all

#include 

using FunctionPtr = void (*)();

// Primary template
template
void demo() = delete;

// The common code default implementation
template
void demo() { };

// Detect if a specialization exists
template
concept has_demo = requires { demo(); };

static_assert(has_demo);
static_assert(!has_demo); // False - no user-provided specialization.
< /code>
Ich muss schließlich den tatsächlichen aufgelösten Funktionszeiger in einer Vulkan -Versandtabelle speichern. Ich versuche also, eine Auflösungsfunktion zu schreiben, die die Spezialisierung zurückgibt, wenn sie vorhanden ist, und nicht anders: < /p>
constexpr FunctionPtr getPointer(void)
{
if constexpr(has_demo)
{
return demo;
}

return demo;
}
... was sich anschließend beschwert, dass Demo die gelöschte Vorlage aufschlägt (was wahr ist, weil der Benutzer keine bereitgestellt hat). "True" -Merkmal für jede Funktionspezialisierung, die sie bereitstellen, ist eine schlechtere Benutzererfahrung in Bezug auf Benutzer, die mehr Code schreiben müssen. Gibt es eine Möglichkeit, das zu vermeiden?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post