Ссылка на проект и ссылка на файл?

Нет.

Но вот! Если вы используете std::vector<Car>, как и должно быть (никогда не используйте new[]), вы можете точно указать, как должны быть построены элементы *.

* Хорошо. Вы можете указать значение для создания копий.


Как это:

#include <iostream>
#include <vector>

class Car
{
private:
    Car(); // if you don't use it, you can just declare it to make it private
    int _no;
public:
    Car(int no) :
    _no(no)
    {
        // use an initialization list to initialize members,
        // not the constructor body to assign them
    }

    void printNo()
    {
        // use whitespace, itmakesthingseasiertoread
        std::cout << _no << std::endl;
    }
};

int main()
{
    int userInput = 10;

    // first method: userInput copies of Car(5)
    std::vector<Car> mycars(userInput, Car(5)); 

    // second method:
    std::vector<Car> mycars; // empty
    mycars.reserve(userInput); // optional: reserve the memory upfront

    for (int i = 0; i < userInput; ++i)
        mycars.push_back(Car(i)); // ith element is a copy of this

    // return 0 is implicit on main's with no return statement,
    // useful for snippets and short code samples
} 

С дополнительной функцией:

void printCarNumbers(Car *cars, int length)
{
    for(int i = 0; i < length; i++) // whitespace! :)
         std::cout << cars[i].printNo();
}

int main()
{
    // ...

    printCarNumbers(&mycars[0], mycars.size());
} 

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

30
задан JaredPar 10 June 2009 в 05:34
поделиться

7 ответов

Вы не указали, но я предполагаю, что вы имеете в виду Visual Studio?

Основное различие между ссылкой на проект и ссылкой на файл заключается в том, доступны ли обновления в реальном времени. В ссылке на проект вы сможете сразу увидеть эффекты редактирования в одном проекте в другом с помощью таких элементов, как Intellisense. Так, если вы, например, добавляете класс с именем Foo, этот тип будет немедленно отображаться в intellisense в любом проекте, имеющем ссылку на проект в этом проекте.

С другой стороны, ссылки на файлы могут видеть только изменения, которые присутствуют на диске. Чтобы увидеть изменения, необходимо выполнить компиляцию и записать биты на диск.

В общем, лучше использовать ссылку на проект.

Еще один аспект, который необходимо учитывать, - это относительные языки проектов. Ссылки Project to Project максимально полезны, если язык в обоих проектах одинаков. Если языки разные, они, как правило, рассматриваются как ссылки на файлы, а не как ссылки на проекты.

32
ответ дан 27 November 2019 в 23:58
поделиться

Я только что прошел через это ...

Мы получили от поставщика около 53 различных файлов решений VS2005 C #, которые создали 63 различных файла .dll проекта, все из которых вызываются отдельное коммерческое приложение.

Все проекты содержали ссылки на файлы DLL других проектов.

Проблемы с этим подходом были огромными: зависимости между решениями было почти невозможно решить, включая много команд "findstr"; функция "найти определение" в VS не будет находить источник для файловых DLL, а будет показывать только определения функций внутри DLL; перекомпоновка из-за изменений была подвержена ошибкам, была громоздкой и включала открытие множества различных решений для перекомпоновки всего набора dll.

Я потратил недели на объединение 53 различных файлов решений в один, а затем потратил дополнительное время на изменение всех зависимостей файлов на зависимости проекта. Теперь, когда вы «находите определение», вы попадаете в исходный файл. Теперь, когда вы изменяете низкоуровневый проект, все зависимые проекты будут построены, когда вы создадите (одно) решение.

Я внес несколько дополнительных изменений, но самым удобным было установить все каталоги сборки отдельных проектов на каталог решения / bin. Таким образом, все библиотеки DLL будут собраны в одном месте.

О, да: я также установил для параметра «копировать локальную» значение «нет» для всех библиотек DLL проектов, на которые имеется ссылка. Таким образом, каждая dll будет отображаться в solutiondir / bin по мере сборки проекта и будет найдена в следующих проектах для сборки.

Единственная проблема, с которой мы сейчас сталкиваемся, заключается в том, что если я изменю проект, который используется в качестве источника данных для другого проекта с помощью Windows Form, то Windows Form не откроется в Designer, пока я не перестрою проект, который является источником данных для форма. Маленькая, небольшая плата за все преимущества ссылок на проекты. Кроме того, мне нужно создать решение при оформлении заказа из svn, потому что библиотеки DLL не находятся в svn. В приведенном выше случае .dll источника данных не может найти Designer.

9
ответ дан 27 November 2019 в 23:58
поделиться

Используйте «ссылку на проект», чтобы добавить ссылку на сборки в вашем решении.

Используйте «ссылку на файл», чтобы добавить ссылку на сборки кросс-решения

Источник

5
ответ дан 27 November 2019 в 23:58
поделиться

В конце все ссылки являются ссылками на файлы, Ссылка на проект - это просто функция Visual Studio, которая делает ссылку на файл, который создается с вашим решением, поэтому всякий раз, когда вы создаете новая сборка, ссылка обновляется автоматически без необходимости копировать и вставлять файлы

0
ответ дан 27 November 2019 в 23:58
поделиться

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

0
ответ дан 27 November 2019 в 23:58
поделиться

Когда проект перестраивается, все проекты, которые ссылаются на него, также автоматически перестраиваются.

Это неверно для файловых ссылок.

0
ответ дан 27 November 2019 в 23:58
поделиться

Фактически оба метода используют ссылки на файлы. Ссылка на проект полезна для VS, чтобы узнать, когда следует построить проект VS, на который указывает ссылка

s

-1
ответ дан 27 November 2019 в 23:58
поделиться
Другие вопросы по тегам:

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