将类的所有变量传递给函数
Pass all variables of class to function
我有一个函数,它接受不同类型的不同变量,并根据类型使用这些变量进行计算。
c++中的类/结构是否可以将所有公共变量传递给函数?
类似这样的东西:
class some_vars {
int a=3;
double b=5.0;
std::string str="thanks for help";
};
void f(some_vars.commaseparatedvariables);
some_vars.commaseparated变量在这里是:some_vars.a、some_vars.b、some_vars.str
edit我不想枚举整个类。我只想将类的所有公共可用变量传递给一个函数。
edit2函数可以处理不同类型的变量。因此,对我来说,传递类变量是很自然的,当需要更改时,我只需要更改它们,而不必在函数中第二次更改它们。(希望这能澄清问题。)
void f(some_vars & some) {
//some.a == 5
}
更好的是,如果您不想更改对象的变量,则通过常量引用传递它。
void f(const some_vars & some);
当然,也就是说,假设您已经创建了f函数,并且仍然有能力和意愿重写它的头和实现。否则,您将不得不将每个变量单独传递到函数中。
如果您的函数以这种方式定义…
void f(int a, double b, std::string str) {
// implementation
}
…如果你不能更改它,那么你必须明确地提供单独的参数:
some_vars vars;
f(vars.a, vars.b, vars.str);
这是不做的方法,但会得到你想要的:您只需创建一个包含所有类成员的结构,然后将它们创建为指向原始变量的指针:
class Test
{
public:
static struct MyParams
{
int* intNumber;
float* floatNumber;
double* doubleNumber;
};
Test() :
intNumber(100),
floatNumber(100.1f),
doubleNumber(100.2)
{
myParameters.intNumber = &intNumber;
myParameters.floatNumber = &floatNumber;
myParameters.doubleNumber = &doubleNumber;
}
MyParams& GetAllMyParameters()
{
return this->myParameters;
}
private:
int intNumber;
float floatNumber;
double doubleNumber;
MyParams myParameters;
};
void CalcAllParams(Test::MyParams* _myParams)
{
double sum = 0.0;
sum = *_myParams->intNumber + *_myParams->floatNumber + *_myParams->doubleNumber;
std::cout << sum << std::endl;
}
int main()
{
Test test;
CalcAllParams(&test.GetAllMyParameters());
std::cin.get();
return 0;
}
相反,您可以将类作为引用(阅读为什么在所有情况下都不是一个好主意)或指针传递,并访问所有公共成员函数,如果您愿意的话,如下面的示例所示:
class Test
{
public:
int intNumber;
float floatNumber;
double doubleNumber;
Test()
{
intNumber = 1;
floatNumber = 1.f;
doubleNumber = 1.0;
}
};
void CalcAllParams(Test* _testClassObject)
{
double sum = 0.0;
sum = (_testClassObject->intNumber + _testClassObject->floatNumber + _testClassObject->doubleNumber);
std::cout << sum << std::endl;
}
int main()
{
Test test;
CalcAllParams(&test);
std::cin.get();
return 0;
}
不是很直接,但您可以使用std::tuple
和一个辅助函数:
auto to_tuple(const some_vars& s)
{
return st::tie(s.a, s.b, s.str); // or std::make_tuple
}
并转换
template <typename...Ts>
void f(Ts&&...);
进入
template <typename...Ts>
void f(std::tuple<Ts...>& tuple);
相关文章:
- 未使用的C++未优化的静态成员函数/变量
- 内联函数/变量的外部链接
- 同一函数中的静态函数变量初始化顺序
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 如何从doxygen输出中排除类的无证件成员函数/变量
- 如何在LUA C API中分配全局LUA函数变量
- 如何将函数变量传递给C lambda函数
- 通过另一个C++函数更改函数变量
- c++11 lambda 真的支持闭包吗?函数变量中存在语义冲突
- C++:静态成员不能在声明时定义,但静态函数变量可以?
- apache-frift是否支持函数变量作为参数
- 类函数/变量在使用之前必须声明
- 函数变量去哪里
- 无法使用函数变量?错误表达式必须具有类类型
- 如何在main中使用函数变量
- 每当尝试打印函数变量时,C++ cout 错误
- 是否存在查看成员函数/变量的整洁等效项
- 访问友元类之间的函数变量
- 函数到函数变量
- 一个定义规则是否强制创建一个静态函数变量