Template Defaultargumente



  • Ich habe folgenden Code:

    #pragma once
    
    #include <exception>
    
    template <typename error_type>
    class DefaultException : public std::exception
    {
    public:
    	DefaultException(error_type code) : code(code) {}
    	virtual const char *what() const override = 0;
    
    	error_type errorcode() const
    	{
    		return code;
    	}
    
    private:
    	error_type code;
    };
    
    #pragma once
    
    #include "DefaultException.h"
    
    enum class registry_error
    {
    	ok,
    	access_denied,
    	not_found
    };
    
    template <typename T = registry_error>
    class RegistryException : public DefaultException<T>
    {
    public:
    	RegistryException(T code) : DefaultException<T>(code) {}
    
    	const char *what() const override
    	{
    		switch (code)
    		{
    			case registry_error::ok:			return "No error occurred";
    			case registry_error::access_denied: return "Access denied";
    			default:							return "An unknown error occurred";
    		}
    	}
    };
    

    Bei meiner RegistryException habe ich ja einen Default Template-Parameter angegeben. Wenn ich jetzt aber in meinem Code sowas machen will:

    throw RegistryException(registry_error::access_denied);
    

    sagt der Compiler, dass ihm die Argumentliste für die Klassenvorlage fehlt.
    Kann mir wer erklären wie ich das fixen kann?

    Gruß


  • Mod

    throw RegistryException<>(registry_error::access_denied);
    

Anmelden zum Antworten