В конце я решил использовать директиву ref
Vue . Это позволяет ссылаться на компонент для родителя для прямого доступа.
Например,
Укомплектовать compendent в моем родительском экземпляре:
var vm = new Vue({
el: '#app',
components: { 'my-component': myComponent }
});
компонент в шаблоне / html со ссылкой:
Теперь, в другом месте, я могу получить доступ к компоненту извне
См. эту скрипту для примера: https: //jsfiddle.net/xmqgnbu3/1/
(старый пример с использованием Vue 1: https://jsfiddle.net/6v7y6msr/ )
dynamic_cast должен добиться цели
TYPE& dynamic_cast<TYPE&> (object);
TYPE* dynamic_cast<TYPE*> (object);
dynamic_cast
, ключевое слово бросает данную величину от одного типа указателя или ссылочного типа другому, выполняя проверку на этапе выполнения для обеспечения законности броска.
, При попытке бросить к указателю на тип, который не является типом фактического объекта, результат броска будет ПУСТЫМ. При попытке бросить к ссылке на тип, который не является типом фактического объекта, то бросок бросит bad_cast
исключение.
Удостоверяются, что существует по крайней мере одна виртуальная функция в Базовом классе, чтобы заставить dynamic_cast работать.
Это называют RTTI, но Вы почти наверняка хотите пересмотреть свой дизайн здесь, потому что нахождение типа и выполнение специальных вещей на основе его делают Ваш код более хрупким.
Вероятно, встройте в свои объекты идентификатор "тег" и используйте его для различения объекты класса A и объекты класса B.
Это однако показывает дефект в дизайне. Идеально те методы в B, который не имеет A, должны быть частью A, но оставленный пустой, и B перезаписывает их. Это покончило с определенным для класса кодом и находится больше в духе ООП.
Поскольку другие указали, что можно использовать dynamic_cast. Но обычно с помощью dynamic_cast для обнаружения типа производного класса Вы работаете на, указывает на плохой дизайн. При переопределении функции, которая берет указатель как параметр затем, это должно смочь работать с методами/данными самого класса A и не должно зависеть от данные класса B. В Вашем случае вместо того, чтобы переопределить, если Вы уверены, что метод пишете, будет работать только с классом B, затем необходимо записать новый метод в классе B.
Ваше описание немного сбивает с толку.
Вообще говоря, хотя некоторые реализации C++ имеют механизмы для него, Вы, как предполагается, не спрашиваете о типе. Вместо этого Вы, как предполагается, делаете dynamic_cast на указателе на A. То, что это сделает, - то, что во времени выполнения, фактическое содержание указателя на A будет проверено. Если у Вас будет B, то Вы получите свой указатель на B. Иначе Вы получите исключение или пустой указатель.
Используйте перегруженные функции. Не требует dynamic_cast или даже поддержки RTTI:
class A {};
class B : public A {};
class Foo {
public:
void Bar(A& a) {
// do something
}
void Bar(B& b) {
Bar(static_cast<A&>(b));
// do B specific stuff
}
};