Есть ли способ вывести параметры вложенного шаблона? [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Есть ли способ вывести параметры вложенного шаблона? [дубликат]

Сообщение Anonymous »

У меня два класса:

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

template 
class Model;

template 
class Mesh;
Мне нужна модель, которая бы содержала Mesh в качестве члена, но со следующими ограничениями:
Если Model, членом должен быть Mesh. Если Model, то элементом может быть либо Mesh, либо Mesh.
Я пытаюсь использовать концепции чтобы решить эту проблему, и уже написал:

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

template 
concept validMesh = requires (Tp model, TMp mesh)
{
std::floating_point&& std::floating_point && (std::same_as || std::same_as);
};

template 
requires std::floating_point
class Mesh {
public:
Mesh() = default;
};

template 
requires validMesh
class Model {
public:
Model(Mesh mesh) : mesh{ mesh } { };

private:
Mesh mesh;
};
Это работает, и я могу использовать его следующим образом:

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

Mesh mesh;
Model model(mesh);
Но если я хочу использовать Mesh и Model, мне нужно указать оба параметра шаблона при создании экземпляра Model, то есть:

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

Mesh mesh;
Model model(mesh);
Почему он не способен вывести TMp? То есть, почему не работает следующее:

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

Mesh mesh;
Model model(mesh);
Разве компилятор не должен знать, что сетка, передаваемая в конструктор, имеет тип Mesh? И, таким образом, не должен ли TMp быть выведен как float? Возможно, я в любом случае преследую что-то, что будет нечитабельно, это была всего лишь моя первая попытка реализовать это, и я был удивлен, когда это не сработало.

Подробнее здесь: https://stackoverflow.com/questions/785 ... parameters

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