Size: a a a

2020 December 09

VK

Valentin Kornienko in pro.cxx
Ilia Zviagin
Только С его вызывать не будет
Почему?
источник

VK

Valentin Kornienko in pro.cxx
implicit cast не произойдет, елси у типа определен оператор каста?
источник

ПК

Побитый Кирпич... in pro.cxx
Valentin Kornienko
implicit cast не произойдет, елси у типа определен оператор каста?
Функции по указателю принимают, там не будет каста
источник

IZ

Ilia Zviagin in pro.cxx
Valentin Kornienko
Почему?
Не знаю, не обучен...
источник

IZ

Ilia Zviagin in pro.cxx
Valentin Kornienko
implicit cast не произойдет, елси у типа определен оператор каста?
Да ладно, это фантазии всё пока, неизвестно, что ей там надо.
источник

VK

Valentin Kornienko in pro.cxx
Побитый Кирпич
Функции по указателю принимают, там не будет каста
А, вот в чем беда
источник

VK

Valentin Kornienko in pro.cxx
Я думал, по значению автор вопроса собирается их кидать
источник

IK

Irina Khomutova in pro.cxx
Нет, по указателям
источник

IK

Irina Khomutova in pro.cxx
Ilia Zviagin
Да ладно, это фантазии всё пока, неизвестно, что ей там надо.
Она там сидит и читает умные мысли....
источник

ПК

Побитый Кирпич... in pro.cxx
А у шаблонного using-а можно делать полные специализации же?
источник

CD

Constantine Drozdov in pro.cxx
Побитый Кирпич
А у шаблонного using-а можно делать полные специализации же?
Думаю, что специализировать его нельзя, но деньги на это не поставлю
источник

AT

Alexander Tulikov in pro.cxx
Irina Khomutova
Коллеги, добрый день! Такой вопрос:
Есть низкоуровневые процедуры на си. К ним структуры, различающиеся типом данных для 1-2 членов из 5-8.
Думается использовать в таких случая шаблоны из C++, а далее определять типы:
Ну к примеру, пусть будет шаблон
template <typename T>
struct {
Int * I;
Int n;
T A;
} matrix

И уже типы:
typedef matrix<double> d_matrix;
typedef matrix<float> f_matrix;

Подскажите, некостыльное решение (собирать процедуры g++ нельзя), пожалуйста, чтобы и руками не плодить множество одинаковых структур, и чтобы на си собрать процедуры, а на C++ описать шаблоны типов и сами типы 🙄
Если собирать на чистом C процедуры, то и все используемые в них структуры, очевидно, должны быть чисто сишные. Другое дело, если вы хотите надо всем этим потом ещё построить C++ обёртку.
источник

ПК

Побитый Кирпич... in pro.cxx
Constantine Drozdov
Думаю, что специализировать его нельзя, но деньги на это не поставлю
Блин, тогда мой вариант не получится
источник

CD

Constantine Drozdov in pro.cxx
Побитый Кирпич
Блин, тогда мой вариант не получится
Ну это не нужно, потому что можно делать using в трейт
источник

ПК

Побитый Кирпич... in pro.cxx
Constantine Drozdov
Ну это не нужно, потому что можно делать using в трейт
А, внатуре
источник

IZ

Ilia Zviagin in pro.cxx
Irina Khomutova
Она там сидит и читает умные мысли....
Давай быстрее пример API и ещё — ЧТО НАДО ДЕЛАТЬ с этим, чего бы хотелось добиться от гипотетического кода на С++ и использвания шаблонов.
источник

IK

Irina Khomutova in pro.cxx
Alexander Tulikov
Если собирать на чистом C процедуры, то и все используемые в них структуры, очевидно, должны быть чисто сишные. Другое дело, если вы хотите надо всем этим потом ещё построить C++ обёртку.
Вы подтверждаете мой вывод до того, как сюда пришла🤔
источник

ПК

Побитый Кирпич... in pro.cxx
Irina Khomutova
Нет, по указателям
Я думал как то так:
template <typename T>
trait_for_cpp_struct;

#define DEFINE_TYPE(T) \
struct my_c_struct_##T {\
 int i;\
 T custom;\
};\
\
template <>\
trait_for_cpp_struct<T> {\
 using type = my_c_struct_##T;\
};\


и потом

DEFINE_TYPE(int);
DEFINE_TYPE(double);

template <typename T>
using cpp_struct = typename trait_for_cpp_struct<T>::type;


и получается у нас функции принимают:
my_c_struct_int*
my_c_struct_double*

При этом есть:
cpp_struct<int> == my_c_struct_int
cpp_struct<double> == my_c_struct_double


Это всё возможно если паттерн для генерации имени сишной структуры есть - в моём случае my_c_struct_##T
источник

ПК

Побитый Кирпич... in pro.cxx
Там только надо ifdef-ы пихнуть чтоб на Си не было кода с шаблонами
источник

AS

Anatoly Shirokov in pro.cxx
Irina Khomutova
Коллеги, добрый день! Такой вопрос:
Есть низкоуровневые процедуры на си. К ним структуры, различающиеся типом данных для 1-2 членов из 5-8.
Думается использовать в таких случая шаблоны из C++, а далее определять типы:
Ну к примеру, пусть будет шаблон
template <typename T>
struct {
Int * I;
Int n;
T A;
} matrix

И уже типы:
typedef matrix<double> d_matrix;
typedef matrix<float> f_matrix;

Подскажите, некостыльное решение (собирать процедуры g++ нельзя), пожалуйста, чтобы и руками не плодить множество одинаковых структур, и чтобы на си собрать процедуры, а на C++ описать шаблоны типов и сами типы 🙄
можно имитировать наследование в С, по типу:

struct base {
  Int* l;
  Int n;
};
struct concrete_type {
  struct base base;
  int A;
};
источник