Аргумент функции не имеет типа

Я встретил следующий код в документации OpenVDB:

template<typename _RootNodeType>
class Tree: public TreeBase
{
...
    template<typename OtherTreeType>
    Tree(const OtherTreeType& other,
        const ValueType& inactiveValue,
        const ValueType& activeValue,
        TopologyCopy): // <-- this looks weird
        TreeBase(other),
        mRoot(other.root(), inactiveValue, activeValue, TopologyCopy())
    {
}

Ранее я видел, что аргумент по умолчаниюint если тип не указан, но может ли это быть здесь? TopologyCopy вызывается как оператор на 2 строки ниже.

Что делает / означает вышеуказанная декларация?

Изменить: принятый ответ объясняет, что происходит. Решение состоит в том, чтобы вызвать функцию как

openvdb::Tree newTree(oldTree, inactiveValue, activeValue, TopologyCopy());

2 ответа

Решение

Это не аргумент без типа. Это аргумент без имени. Его тип TopologyCopy, А также TopologyCopy() по умолчанию конструирует объект этого типа и передает его конструктору mRoot, Если бы мне пришлось угадывать, я бы сказал, что они, вероятно, используют здесь диспетчеризацию тегов для выбора между различными конструкторами с другими одинаковыми аргументами.

TopologyCopy является типом, и поскольку аргумент / переменная не используется, его нет.

Следующий TopologyCopy() строит TopologyCopy,

Другие вопросы по тегам