Войти
ФлеймФорумОбщее

Вопросы (671 стр)

Страницы: 1670 671 672 673791 Следующая »
#10050
16:44, 17 июня 2019

Почему олово такое дорогое?


#10051
17:09, 17 июня 2019

Freakazoitt
> Почему олово такое дорогое?
Оловянных шахт мало

#10052
17:14, 17 июня 2019

nes
Что лажа? Что нельзя залезть в текст неприинклюженного цппшника? Или что цппшник с шаблоном не знает заранее, с какими параметрами сей шаблон будет использоваться?

#10053
17:19, 17 июня 2019

https://stackoverflow.com/questions/115703/storing-c-template-fun… in-a-cpp-file

#10054
17:58, 17 июня 2019

1 frag / 2 deaths
Лажа, что компилятор / линкер, встретив в коде какой-нибудь SomeFoo<int>() не знает, где искать имплементацию этого SomeFoo.

#10055
17:59, 17 июня 2019

Freakazoitt
  Потому что его трудно добыть

#10056
18:08, 17 июня 2019

nes
> Лажа, что компилятор / линкер, встретив в коде какой-нибудь SomeFoo<int>() не
> знает, где искать имплементацию этого SomeFoo.
Да потому что нет нигде этой имплементации, понимаешь? А тело зарыто в левом цпп, который вообще не подключён к текущей единице трансляции.

#10057
18:11, 17 июня 2019

1 frag / 2 deaths
>А тело зарыто в левом цпп, который вообще не подключён к текущей единице трансляции.
Подключен.
Чем, например, вот это:

// foo.h
template<typename T>
T Foo();

// foo.cpp
template<typename T>
T Foo()
{
  return (T)0;
}

// test.cpp
int n = Foo<int>();

Принципиально отличается от этого?

// foo.h
int Foo();

// foo.cpp
int Foo()
{
  return 0;
}

// test.cpp
int n = Foo();

#10058
18:14, 17 июня 2019

nes
> // foo.cpp
> template<typename T>
> T Foo()
> {
> return (T)0;
> }
Здесь нет реального кода, бинарного. Он не генерируется.

> // test.cpp
> int n = Foo<int>();
Здесь код будет уже генерироваться. Но откуда ему знать как генерироваться, если теоретическая реализация скрыта в другой единице трансляции?

#10059
(Правка: 18:17) 18:15, 17 июня 2019

nes
> Чем, например, вот это:
Где добыть тело для Foo<int>, где?!
Он не может в foo.cpp родить все теоретически возможные инстанциации, только если ты их сам там перечислишь.

nes
> Принципиально отличается от этого?
Foo() инстанциировано в foo.cpp. То есть там уже сидит готовый бинарный код. Пофиг на его текст. Просто есть готовый бинарь, пришиваем и радуемся.

#10060
18:17, 17 июня 2019

nes
Говорю, просто почитай, как вообще это работает и все вопросы сами уйдут.

#10061
18:18, 17 июня 2019

Vlad2001_MFS
>Здесь нет реального кода, бинарного. Он не генерируется.
Здесь он и не должен бинарно генерироваться, здесь мы делаем лишь пометку, где исходник для имплементаций.

>Здесь код будет уже генерироваться. Но откуда ему знать как генерироваться, если теоретическая реализация скрыта в другой единице трансляции?
А тут, тадааам, мы ищем реализацию и находим хинт, который был создан для foo.cpp, на основе используемого типа и кода в foo.cpp генерим имплементацию - магия!

#10062
18:20, 17 июня 2019

1 frag / 2 deaths
Ничто не мешает поиметь список "отложенных" имплементаций и нагенерить из них бинарники для всех точек инстанцирования.

#10063
18:22, 17 июня 2019

nes
> Ничто не мешает поиметь список "отложенных" имплементаций и нагенерить из них
> бинарники для всех точек инстанцирования.
Мешает, трудно отслеживать зависимости. То есть теперь изменения в foo.cpp будут требовать перекомпиляцию test.cpp что ли? Нахрена? Ради чего тогда придумали разделение на хэ и цэпэпэ?

Пиши тогда сразу тело шаблона в заголовке.

#10064
18:25, 17 июня 2019

1 frag / 2 deaths
Зачем перекомпилирвать, если вид функции не меняется, а лишь ее содержимое, то ничего не надо перекомпиливать, все так же,
как в случае с обычными функциями.
С классами возможно будет сложнее, да.

Страницы: 1670 671 672 673791 Следующая »
ФлеймФорумОбщее