Я наткнулся на следующий код в 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());
Это не аргумент без типа. Это аргумент без имени. Его тип TopologyCopy
, А также TopologyCopy()
по умолчанию конструирует объект этого типа и передает его конструктору mRoot
, Если бы мне пришлось угадывать, я бы сказал, что они, вероятно, используют здесь диспетчеризацию тегов для выбора между разными конструкторами с другими одинаковыми аргументами.
TopologyCopy
является типом, и поскольку аргумент / переменная не используется, его нет.
Следующий TopologyCopy()
строит TopologyCopy
,