Как использовать std::array.size() в качестве параметра шаблона, если класс имеет неconstexpr std::arrayC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать std::array.size() в качестве параметра шаблона, если класс имеет неconstexpr std::array

Сообщение Anonymous »

Ниже приведен игрушечный пример
У ученика есть std::array с именем name и целочисленный возраст. У учащегося есть функция-член под названием encode, которая вызывает глобальную функцию шаблона encode, используя name.size() в качестве параметра шаблона.
код показан ниже:

Код: Выделить всё

//main.cpp
#include 
#include 

template 
unsigned long encode(unsigned long num2){
return num1 + num2;
}

struct student {
std::array name;
int age;
student(const std::array& name, int age):
name(name),
age(age)
{}
unsigned long encode(){
return ::encode(age);
}
};

int main(){
std::array name = {"Tim"};
student Tim(name, 17);
std::cout g++ main.cpp -std=c++11

main.cpp: In member function 'long unsigned int student::encode()':
main.cpp:22:43: error: use of 'this' in a constant expression
22 |                 return ::encode(age);
|                                           ^
main.cpp:22:45: error: no matching function for call to 'encodestudent::name.std::array::size()>(int&)'
22 |                 return ::encode(age);
|                        ~~~~~~~~~~~~~~~~~~~~~^~~~~
main.cpp:9:15: note: candidate: 'template long unsigned int encode(long unsigned int)'
9 | unsigned long encode(unsigned long num2){
|               ^~~~~~
main.cpp:9:15: note:   template argument deduction/substitution failed:
main.cpp:22:45: error: use of 'this' in a constant expression
22 |                 return ::encode(age);
|                        ~~~~~~~~~~~~~~~~~~~~~^~~~~
main.cpp:22:42: note: in template argument for type 'long unsigned int'
22 |                 return ::encode(age);
Нужно ли мне использовать ::encode(age), чтобы решить эту проблему, потому что я считаю одно из основных преимуществ std::array позволяет хранить размер вместо необходимости хранить его в какой-то дополнительной переменной (или жестко запрограммировать размер).

Код: Выделить всё

g++ version: 14.1.0


Подробнее здесь: https://stackoverflow.com/questions/793 ... a-non-cons
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как использовать std::array.size() в качестве параметра шаблона, если класс имеет неconstexpr std::array
    Anonymous » » в форуме C++
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Как использовать std :: array.size () в качестве параметра шаблона, когда у класса есть неконтекспр std :: array
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Contexpr Sanearer String Literal to std :: array c ++ 17
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Contexpr Parser Semes String Literal to std :: array c ++ 17
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Contexpr Parser Semes String Literal to std :: array c ++ 17
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»