Poszukuję sposobu sprawdzenia argumentów funkcji w czasie kompilacji, jeśli można to zrobić dla kompilatora.C++ argumenty funkcji sprawdzania kompilacji w czasie
Aby być bardziej szczegółowym: załóżmy, że mamy jakąś klasę Matrix.
class Matrix
{
int x_size;
int y_size;
public:
Matrix(int width, int height):
x_size{width},
y_size{height}
{}
Matrix():
Matrix(0, 0)
{}
};
int main()
{
Matrix a; // good.
Matrix b(1, 10); // good.
Matrix c(0, 4); // bad, I want compilation error here.
}
Więc mogę sprawdzić czy różnicują zachowania (przeciążenia funkcja?) W przypadku statycznych (źródło kodowane) wartości przekazywane do funkcji?
Jeśli wartość nie jest statyczna:
std::cin >> size;
Matrix d(size, size);
jesteśmy tylko w stanie zrobić kontrole uruchomieniowe. Ale jeśli wartości są zakodowane w źródle? Czy mogę w tym przypadku wykonać kontrolę kompilacji?
EDYCJA: Myślę, że to może być możliwe z constexpr constructor, ale w każdym razie przeciążanie zi bez constexpr jest niedozwolone. Więc problem nie może być rozwiązany w sposób, jak przypuszczam.
Nie sądzę, że można złamać kompilację, jeśli ktoś przekaże błędne argumenty. Normalnym sposobem jest wyrzucenie wyjątku na złe wartości –