Ошибки, баги, вопросы - страница 2717

 
Artyom Trishkin:

А для чего спрашивать очевидное? С очевидным ожидаемым ответом.

Ушёл.

Для того, чтобы кто-то подтвердил что кипят мозги и нужно отдохнуть.

Вернись, я всё прощу... Кто-же почистит тему от всего этого.....

 

Возможно дубликат, но все равно прошу разработчиков убедится, что нижеприведенный код после исправлений будет работать корректно.
Баг МТ5 (build 2380) ошибка в приоритетах вызова перегруженных шаблонных функций.
C++ online (https://onlinegdb.com/S1wH7RpuI)

template<typename T>
struct A{
   T data;
};

template<typename T>
class B{
   T data;
};


void test(A<B<int>> &, A<B<int>> &, A<B<int>> &){
   printf("1");
}; 

template<typename T>
void test(A<B<T>> &, A<B<T>> &, A<B<T>> &){
   printf("2");
}; 

template<typename T, typename TT>
void test(A<B<T>> &, A<B<T>> &, A<B<TT>> &){
   printf("3");
}; 

template<typename T>
void test(A<T> &, A<T> &, A<T> &){
   printf("4");
}; 

template<typename T, typename TT>
void test(A<T> &, A<T> &, A<TT> &){
   printf("5");
}; 

template<typename T>
void test(T &, T &, T &){
   printf("6");
}; 

template<typename T, typename TT>
void test(T &, T &, TT &){
   printf("7");
}; 


void OnStart(){ 
   A<B<int>>    a_b_int;
   A<B<double>> a_b_double;
   
   A<int>    a_int;
   A<double> a_double;
   
   B<int>    b_int;
   B<double> b_double;
   
   test(a_b_int,    a_b_int,    a_b_int);       // 1
   test(a_b_double, a_b_double, a_b_double);    // 2
   test(a_b_int,    a_b_int,    a_b_double);    // 3
   test(a_int,      a_int,      a_int);         // 4
   test(a_int,      a_int,      a_double);      // 5
   test(b_int,      b_int,      b_int);         // 6
   test(b_int,      b_int,      b_double);      // 7
}   
 

Как создать массив из структур, в которой одно из полей const?

struct A
{
  const int a;
  
  A( const int i ) : a(i)
  {
  }
  
  A() {}
};

void OnStart()
{
  A a1(1);
  A a2(2);
  
  A b[];
  
  ArrayResize(b, 2); // Нужно получить массив структур, как a1 и a2.
}
 
fxsaber:

Как создать массив из структур, в которой одно из полей const?

#define PRINT(x) ; Print(#x, ":", string(x))

struct A
{
   const int a;
   static int default_a;
   
   A( const int i ) : a(i)
   {
   }
   
   A() : a(default_a){}
};
static int A::default_a = 0;


void OnStart()
{
  A a1(1);
  A a2(2);
  
  A b1[];
  A::default_a = 1;  
  ArrayResize(b1, 2); 
  
  A b2[];
  A::default_a = 2;  
  ArrayResize(b2, 2);   
  
  PRINT(b1[0].a);       // 1
  PRINT(b2[0].a);       // 2
}

Если правильно вас понял.

 
Sergey Dzyublik:

Если правильно вас понял.

Спасибо, не догадался до последовательности из ArrayResize.

 
fxsaber:

Спасибо, не догадался до последовательности из ArrayResize.

ArrayResize применялся к разным массивам. 
Или вам нужен один массив с последовательностью значениями a: 1, 2, 3, 4, 5, 6, 7, 8,... ?

 
Sergey Dzyublik:

ArrayResize применялся к разным массивам. 
Или вам нужен один массив с последовательностью значениями a: 1, 2, 3, 4, 5, 6, 7, 8,... ?

Один массив. Из Вашего варианта увидел возможность последовательного ArrayResize.

 
fxsaber:

Один массив. Из Вашего варианта увидел возможность последовательного ArrayResize.

Еще в конструкторе можно инкрементировать default_a, обнуляя его до нужного значения перед ArrayResize.

 
Sergey Dzyublik:

Еще в конструкторе можно инкрементировать default_a, обнуляя его до нужного значения перед ArrayResize.

Для общей задачи нельзя, т.к. не последовательные значения.

Жаль, что приходится тащить за собой static-переменную, да еще и public. Костыльно получается.

[Удален]  
fxsaber:

Как создать массив из структур, в которой одно из полей const?

Как вариант:

struct A
{
  const int a;
  
  A( const int i ) : a(i)
  {
  }
  
  A() : a( getDef() ) {}
  
  static int getDef()
  {
     static int n = 0;
     return sdefs[n++];
  }
};

int sdefs[] = {5, 100, 200, 150, 500};