C++重载;相同类型的可变参数?

标签 c++ overloading default-value optional-parameters

我有一个类,其构造函数如下所示:

Chunker::Chunker(int chunkSizeX, int chunkSizeY){
    chunkX = chunkSizeX;
    chunkY = chunkSizeY;
}

我想为用户提供使用 chunkSizeY 的能力或 chunkSizeX有一个默认值(需要由 Chunker 计算)。

I.E 所以他们可能会传入一个“AUTO”关键字或其他东西,以便构造函数知道。

我可以做类似的事情吗:

Chunker::Chunker(int chunkSizeX, char chunkSizeY)

Chunker::Chunker(char chunkSizeX, int chunkSizeY)

Chunker::Chunker(char chunkSizeX, char chunkSizeY)

所以如果它得到一个 char对于一个或两个值,它知道自动计算它们吗?

我确定他们一定是我还不知道的更好/标准的方式......?

最佳答案

你可以使用一个特殊的空类来帮助:

struct Default {};

class Chunker
{
public:
    Chunker(int x, int y) : chunkX(x), chunkY(y) {}
    Chunker(Default, int y) : chunkX(42), chunkY(y) {}
    Chunker(int x, int Default) : chunkX(x), chunkY(42) {}

private:
    int chunkX;
    int chunkY;
};

用法:

Chunker c(1, 2);
Chunker cx(3, Default{});
Chunker cy(Default{}, 4);

或者使用“静态构建器”

class Chunker
{
public:
    Chunker(int x, int y) : chunkX(x), chunkY(y) {}
    static Chunker FromX(int x) { return Chunker(x, 42); }
    static Chunker FromY(int y) { return Chunker(42, y); }
private:
    int chunkX;
    int chunkY;
};

用法:

Chunker c(1, 2);
Chunker cx = Chunker::FromX(3);
Chunker cy = Chunker::FromY(4);

关于C++重载;相同类型的可变参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28677896/

相关文章:

php - 如何将 Jquery 自动完成设置为特定值并使用 JSON 对象的数据源显示它的标签

php - Magento:添加自定义 EAV 属性,在创建实体时使用其默认值自动填充

sql-server - SQL Server : want to insert data into one column, rest nulls: 不让我

c++ - 使用 CUDA nvcc 编译时与 boost 库的链接失败,使用 gcc 成功

c++ - 使用 OpenCV 和 Matlab 从 RGB 到 YCbCr 的不同颜色转换

c++ - Boost Asio SSL 握手永远不会返回

c++ - 为点坐标创建类

C++ 返回具有常量成员变量的对象——赋值运算符被隐式删除

php - 在 PHP 中重载属性和方法 - 原因是什么?

java - 我可以重构方法调用不同但代码结构一致的代码片段吗?