Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用静态成员函数构造对象_C++ - Fatal编程技术网

C++ 使用静态成员函数构造对象

C++ 使用静态成员函数构造对象,c++,C++,我有一个静态函数,它填充通过引用传递的对象,并返回一个整数来表示错误或成功 static int readDeformationGrid(const std::string& gridFile, DeformationGrid& defgrid) 是否可以使用相同的静态成员函数初始化对象?这是个坏主意吗 差不多 DeformationGrid(const std::string& gridFile)

我有一个静态函数,它填充通过引用传递的对象,并返回一个整数来表示错误或成功

static int readDeformationGrid(const std::string& gridFile,
                                   DeformationGrid& defgrid)
是否可以使用相同的静态成员函数初始化对象?这是个坏主意吗

差不多

DeformationGrid(const std::string& gridFile)
{
    int ret = DeformationGrid::readDeformationGrid(gridFile, *this);
    if(ret < 0)
        throw std::invalid_argument("Error reading deformation grid file " + gridFile);
}
变形网格(const std::string和gridFile) { int-ret=DeformationGrid::readDeformationGrid(gridFile,*this); 如果(ret<0) throw std::无效的_参数(“读取变形网格文件时出错”+gridFile); } 还是应该使用工厂模式

例如,我认为这样的东西在可重构对象中很有用。方法和构造函数将共享相同的代码,因此将其放在第三个成员函数上是有意义的,因为在第二种情况下,它可能还没有对象


如何在构造函数上调用这样的方法?

出于兴趣,为什么不能使用构造函数?在编写“构造函数”时,您的意思是“初始化”,对吗?为什么需要静态成员函数?如果删除默认构造函数并应用@Bathsheba的注释,则可以假定对象始终处于一致状态。因为我想提供一个静态方法来填充预先存在的
DeformationGrid
。虽然在我的例子中你是对的,但我可以提供构造函数来完成这项工作。@alexeykuzmin0你是对的。出于兴趣,为什么你不能使用构造函数?写“构造”时,你的意思是“初始化”,对吗?为什么你需要静态成员函数?如果删除默认构造函数并应用@Bathsheba的注释,则可以假定对象始终处于一致状态。因为我想提供一个静态方法来填充预先存在的
DeformationGrid
。虽然在我的例子中你是对的,但我可以提供构造函数来完成这项工作。@alexeykuzmin0你是对的。