Вот класс, который может быть вызван с различными типом данных:Как вызвать ту же функцию с другим типом данных?
template<class TDataType>
void SetProperties(IndexType PropertiesId,
const Variable<TDataType>& rVariable,
const TDataType& Value)
{
mpModeler->SetProperties(PropertiesId, rVariable, Value);
}
где Modeler :: SetProperties определяется как:
template<class TDataType>
void SetProperties(IndexType PropertiesId,
const Variable<TDataType>& rVariable,
const TDataType& Value)
{
if (mpModel->GetProperties(PropertiesId).get() == 0)
{
mpModel->AddProperties(PropertiesId, Properties::Pointer(new Properties(*mpModel)));
}
PropertyFunction<TDataType>::Pointer constant_property(new ConstantProperty<TDataType>(Value));
mpModel->GetProperties(PropertiesId)->SetProperty(rVariable, constant_property);
}
Класс SetProperties
вызывается:
yyvsp[0].statement_handler->Execute(mpKernel);
Где Execute()
определяется:
template<class TDataType> class GeneratePropertiesStatement : public Statement
{
public:
GeneratePropertiesStatement(int Id,
const Kratos::Variable<TDataType>& rVariable,
const TDataType& Value) : mId(Id),
mVariable(rVariable),
mValue(Value){}
void Execute(Kratos::Kernel* pKernel)
{
pKernel->SetProperties(mId, mVariable, mValue);
}
int mId;
Kratos::Variable<TDataType> mVariable;
TDataType mValue;
};
Одиночные данные или несколько данных передаются по стоимости следующих утверждений:
сингл данные:
yyval.statement_handler = new GeneratePropertiesStatement<double>(yyvsp[-4].integer_value, *yyvsp[-2].double_variable, yyvsp[0].double_value);
, где yyvsp[0].double_value
определяется как double
;
множественные данные:
yyval.statement_handler = new GeneratePropertiesStatement<Kratos::Vector<double> >(yyvsp[-4].integer_value, *yyvsp[-2].vector_double_variable, *yyvsp[0].vector_double_value);
, где *yyvsp[0].vector_double_value
определяется как vector
.
Однако вышеуказанное осуществление зависит от некоторых внешних данных, и мне нужно напрямую вызвать функцию SetProperties. Я определил следующий аргумент и успешно называется функцией:
int i;
const Kratos::Variable<double>* double_variable;
double regionmapi;
...
pKernel->SetProperties(i, *double_variable, regionmapi);
Однако, когда я определил следующий аргумент и называется функцией передать несколько данных, это не удалось:
double tmp3[3];
std::vector<double>aa;
for (int i = 0; i < 3; i++)aa.push_back(tmp3[i]);
pKernel->SetProperties(i, *double_variable, aa);
Может кто-нибудь помочь мне взгляните на него?
Типы важны в C++. Если вам нужно называть его разными типами, у вас есть два варианта: 1. передать переменную с типом, который получен из ожидаемого типа 2. Создайте новый метод, который преобразует пройденный тип в ожидаемый тип и вызовет метод orignal – MaxZoom
Можете ли вы опубликовать сообщение об ошибке что вы видите? –