1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
#pragma once
#include "ideclmanager.h"
namespace decl
{
// Helper template implementing the IDeclarationCreator interface
// handing out the type info and new instances of the given DeclarationType.
template<typename DeclarationType>
class DeclarationCreator :
public IDeclarationCreator
{
private:
static_assert(std::is_base_of_v<IDeclaration, DeclarationType>,
"DeclarationType type must inherit from IDeclaration");
Type _type;
public:
DeclarationCreator(Type type) :
_type(type)
{}
Type getDeclType() const override
{
return _type;
}
IDeclaration::Ptr createDeclaration(const std::string& name) override
{
return std::make_shared<DeclarationType>(name);
}
};
}
|