В настоящее время я работаю над визуальным редактором для создания конечных машин. Ядром является C++, поскольку встроенный FSM будет запускаться в игре. Редактором является C#. Мне удалось получить оболочку CLI, чтобы я мог построить все, что мне нужно, на стороне C#. Последнее, что я пытаюсь сделать, - это предоставить шаблонный шаблон для C#.выставлять C++/CLI templated wrapper в C#
Я начал с создания управляемого класса:
template <typename T>
public ref class TestTemp
{
private:
ClassToWrap<T>* m_val;
public:
TestTemp(T val) :
{
m_val = new ClassToWrap<T>();
}
}
Тогда, поскольку шаблоны генерируются во время компиляции, я принуждая поколение типа с специализации шаблона.
template ref class FSMWrapper::TestTemp<float>;
Я пытался специализация в нескольких местах, CPP, заголовке, а также в основном только в случае, я даже попробовал конкретный экземпляр в основном, как это:
FSMWrapper::TestTemp<float> t(10.0f);
Я даже пытался явно скажите экспортировать символ, как я бы делал в обычном C++, но компилятор жалуется, что я не могу сделать это с управляемым типом.
После этого мне не удалось получить символ в пространстве имен C# (все остальное появляется, поэтому да, обертка работает так, как ожидалось).
Также, если я удаляю шаблон в оболочке и просто назову его TestTempFloat и принудительно создаю экземпляр float, он работает.
public ref class TestTempFloat
{
private:
ClassToWrap<float> m_val;
public:
TestTempFloat(float val) :
{
m_val = new ClassToWrap<float>();
}
};
Что я пытаюсь сделать, возможно ли это? По googling вокруг выглядит так, как есть, но люди просто говорят, оберните его в CLI-тип и заставьте генерировать символы. Если возможно, что я делаю неправильно?
Если это невозможно, мне просто нужно будет сделать специализированные обертки вручную, но не очень, но я знаю, что это работает.
Я также попытался обернуть его в родовом формате вместо шаблона, но тогда я не могу подавать типовой тип T в качестве типа шаблона.
PS: Я знаю, что для освобождения памяти нет деструктора, это всего лишь фиктивный тест, чтобы сохранить пример коротким.
Привет, спасибо! Я не знал об интерфейсе thingy, я новичок в C# и совершенно новый для CLI. Он выглядит интересным, и мне нравится немного лучше, чем макрос. Завтра я уйду и расскажу, как это происходит. Спасибо. –
Если вы новичок в C++/CLI, я бы порекомендовал собирать «C++/CLI in Action» от Nishant Sivakumar. Вот где я узнал трюк, который я опубликовал, и это самый полезный ресурс C++/CLI, к которому я пришел. –
Я пытаюсь понять и реализовать этот подход, грубо говоря, все имеет смысл. Единственное, чего мне не хватает, - это когда фабрика вступает в игру? Мне нужно будет напрямую позвонить на завод прямо с C#? Я не буду создавать экземпляр типового типа напрямую. Верный? –