Приложение.NET может быть скомпилировано в собственный компонент?

Я вижу две проблемы:

1) объявление перегруженной функции для оператора < < содержит символы <>, которые вызывают сбой компиляции. Это можно исправить, удалив <>

2) определение перегруженной функции для оператора < < (и класс ctor) существует в исходном файле, что вызывает сбой компоновщика. Это можно исправить, переместив эти определения из исходного файла в файл заголовка.

Попробуйте использовать следующие заголовочные и исходные файлы, это работает для меня ...

template.h

#pragma once

#include <iostream>
#include <string>


//class must be forward declared because it contains a friend function template
template<class T> class messageTemplate;

//friend function also must be forwards declared
template<class A> std::ostream &operator<<(std::ostream &os, messageTemplate<A> &aTemplate);

template <class T>
class messageTemplate {
public:
    messageTemplate(const std::string &topic, T data);

    template <class A>
    friend std::ostream &operator<<(std::ostream &os, messageTemplate<A> &aTemplate);

private:
    std::string topic;
    T data;
};

template<class T>
messageTemplate<T>::messageTemplate(const std::string &topic, T data):topic(topic), data(data) {};

template <class T>
std::ostream &operator<< (std::ostream &os, messageTemplate<T> &aTemplate) {
    os << "topic: " << aTemplate.topic << " data: " << aTemplate.data;
    return os;
};

main.cpp

#include "template.h"
#include <iostream>

using namespace std;

int main()
{
    messageTemplate< int > test{ "test", 69 };

    cout << test << endl;

    return 0;
}

Выход консоли: [1111 ]

topic: test data: 69

Process finished with exit code 0
8
задан SethO 5 March 2013 в 03:55
поделиться

4 ответа

Можно использовать NGen для компиляции его заранее, но это все еще зависит от платформы.NET. Саламандра Remotesoft (коммерческое приложение) может сделать приложение платформы меньше.

11
ответ дан 5 December 2019 в 09:26
поделиться

ngen может привыкнуть к 'предварительному JIT' изображение, таким образом, это доступно на диске в собственной форме для сокращения времени запуска приложения.

1
ответ дан 5 December 2019 в 09:26
поделиться

Вы компиляция CAN IL в собственные двоичные файлы. Существуют продукты, которые делают это.

Больший вопрос, должен Вы...

Если Вы хотите удалить все точечные сетевые зависимости для выполнения без точечной сети

В основном то, что делают эти продукты, предварительно компилирует вниз в уровень машины (x86 обычно) и затем статически включая все необходимые библиотеки в Вашем exe. Это обычно приводит к ОГРОМНОМУ exe. И что еще более важно, у Вас теперь действительно нет времени выполнения на Вашей целевой машине. У Вас есть часть времени выполнения, которое собственный компилятор принял решение включить.

Если Вы хотите просто получить более быстрое время JIT

Можно также использовать NGen для компиляции его в собственный двоичный файл, но у Вас все еще есть все зависимости от точечной сети. Целевым машинам все еще нужна платформа и т.д.

Но ngen, Вы ТЕРЯЕТЕ способность к приложению к автоматическому, при продвижении до 64 битов. Если Ваше приложение предварительно компилируется, необходимо вызвать один режим. Если бы пользователь работает на машине на 64 бита, Ваш код IL продвинул бы (если Вы не отмечаете его не к).

Время JIT не является Вашим самым большим узким местом в большинстве приложений. Это - загрузка библиотек платформы и других связанных требований.

При реальной необходимости в нем, Вы можете, ngen в рамках приложения установки для получения текущих пользователей предназначаются для машины.

Я также просто недавно узнал, что Вы не можете NGEN приложение и ожидать, что он для использования в своих интересах ЦП как Вы может с JIT. Когда Вы работаете, NGEN, всегда оптимизирует вывод для PentiumPro по некоторым причинам и не использует в своих интересах вещи как SSE, SSE2, и т.д. Таким образом, я сказал бы, что это удаляет NGEN как разумный случай использования.

5
ответ дан 5 December 2019 в 09:26
поделиться

Моно имеет ранее (AOT) компилятор , который может излучать нативный код.

1
ответ дан 5 December 2019 в 09:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: