C++重载; 相同类型的变量args?

jra*_*amm 1 c++ overloading default-value optional-parameters

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

Chunker::Chunker(int chunkSizeX, int chunkSizeY){
    chunkX = chunkSizeX;
    chunkY = chunkSizeY;
}
Run Code Online (Sandbox Code Playgroud)

我想为用户提供具有chunkSizeYchunkSizeX具有默认值(需要通过计算Chunker)的能力.

IE所以他们可能传入'AUTO'关键字或其他东西,以便构造函数知道.

我可以这样做:

Chunker::Chunker(int chunkSizeX, char chunkSizeY)

Chunker::Chunker(char chunkSizeX, int chunkSizeY)

Chunker::Chunker(char chunkSizeX, char chunkSizeY)
Run Code Online (Sandbox Code Playgroud)

因此,如果它获得char一个或两个值,它知道自动计算它们?

我相信他们必须是一个我不知道的更好/标准的方式......?

Jar*_*d42 5

您可以使用特殊的空类来帮助:

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;
};
Run Code Online (Sandbox Code Playgroud)

用法:

Chunker c(1, 2);
Chunker cx(3, Default{});
Chunker cy(Default{}, 4);
Run Code Online (Sandbox Code Playgroud)

或使用"静态构建器"

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;
};
Run Code Online (Sandbox Code Playgroud)

用法:

Chunker c(1, 2);
Chunker cx = Chunker::FromX(3);
Chunker cy = Chunker::FromY(4);
Run Code Online (Sandbox Code Playgroud)