В целом, это не сработает, потому что point
не является subpoint
; верно только обратное. Однако есть и другие проблемы.
В порядке:
subpoint* b = dynamic_cast<subpoint*>(&a);
dynamic_cast
работает только с полиморфными типами, то есть с типами, объявляющими хотя бы одну виртуальную функция. Я предполагаю, что point
не имеет виртуальных функций, что означает, что он не может использоваться с dynamic_cast
.
subpoint* b = (subpoint*)a;
Для этого приведения к работе point
необходимо объявить преобразование оператор subpoint *
, например point::operator subpoint *()
.
subpoint b = (subpoint)a;
Для этого приведения для работы необходимо указать, что оператор преобразования в subpoint
или subpoint
должен иметь который принимает параметр, который можно преобразовать из point
.
Чтобы проверить многопоточность, попробуйте что-то вроде этого:
$pageWithNoChildren = array_map('unserialize',
array_diff(array_map('serialize', $pageids), array_map('serialize', $parentpage)));
array_map()
запускает каждую подматрицу основных массивов через serialize()
serialize()
преобразует каждый вспомогательный массив в строковое представление этого подматрица array_diff()
теперь имеет одномерный массив для каждого из массивов для сравнения array_map()
запускает результат массива (различия) через unserialize()
, чтобы превратить представления строк обратно в суб- массивы QED
Правый путь https://github.com/yapro/helpers/blob/master/src/ArrayHelper.php
class ArrayHelper
{
/**
* @param array $array1
* @param array $array2
* @return array
*/
function arrayDiffAssocMultidimensional(array $array1, array $array2): array
{
$difference = [];
foreach ($array1 as $key => $value) {
if (is_array($value)) {
if (!array_key_exists($key, $array2)) {
$difference[$key] = $value;
} elseif (!is_array($array2[$key])) {
$difference[$key] = $value;
} else {
$multidimensionalDiff = $this->arrayDiffAssocMultidimensional($value, $array2[$key]);
if (count($multidimensionalDiff) > 0) {
$difference[$key] = $multidimensionalDiff;
}
}
} else {
if (!array_key_exists($key, $array2) || $array2[$key] !== $value) {
$difference[$key] = $value;
}
}
}
return $difference;
}
}
Очень приятное решение от @AbraCadaver, но, как я уже сказал в комментариях, могут быть случаи, когда элементы ассоциативных массивов не везде одинаковы, поэтому настраиваемая функция будет сортировать их по индексу / ключу сначала удобно:
function sortAndSerialize($arr){
ksort($arr);
return serialize($arr);
}
array_map('unserialize', array_diff(array_map('sortAndSerialize', $pageids), array_map('sortAndSerialize', $parentpage)));