Small Project Organization
Validation Result
A result struct returns both a success flag and a reason code.
result
Return a small result object when the caller needs more than true or false.
reason
Reason codes let the caller distinguish invalid input from input that is merely incomplete.
Validation Result
validation_result.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
struct Validation {
bool ok;
int code;
};
Validation validateAge(int age) {
if (age < 0) {
return {false, 1};
}
if (age < 18) {
return {false, 2};
}
return {true, 0};
}
int main() {
int age = 17;
Validation result = validateAge(age);
std::cout << "age=" << age << std::endl;
std::cout << "ok=" << result.ok << std::endl;
std::cout << "code=" << result.code << std::endl;
return 0;
}
#include <iostream>
struct Validation {
bool ok;
int code;
};
Validation validateAge(int age) {
if (age < 0) {
return {false, 1};
}
if (age < 18) {
return {false, 2};
}
return {true, 0};
}
int main() {
int age = -3;
Validation result = validateAge(age);
std::cout << "age=" << age << std::endl;
std::cout << "ok=" << result.ok << std::endl;
std::cout << "code=" << result.code << std::endl;
return 0;
}
#include <iostream>
struct Validation {
bool ok;
int code;
};
Validation validateAge(int age) {
if (age < 0) {
return {false, 1};
}
if (age < 18) {
return {false, 2};
}
return {true, 0};
}
int main() {
int age = 21;
Validation result = validateAge(age);
std::cout << "age=" << age << std::endl;
std::cout << "ok=" << result.ok << std::endl;
std::cout << "code=" << result.code << std::endl;
return 0;
}
age ← 17
18int main() {19 int age→ 17 = 17; //@age=21, -32021 Validation result = validateAge(age17);Validation validateAge(int age)
8Validation validateAge(int age17) {9 if (age < 0) {if (age < 18)
11}12if (age17 < 18) {13 return {false, 2};14}result ← (empty)
21 Validation result→ (empty) = validateAge(age17);2223 std::cout << "age=" << age17 << std::endl;24 std::cout << "ok=" << result(empty).ok << std::endl;25 std::cout << "code=" << result(empty).code << std::endl;26 return 0;27}outputage=17 ok=0 code=2
age ← -3
18int main() {19 int age→ -3 = -3;2021 Validation result = validateAge(age-3);Validation validateAge(int age)
8Validation validateAge(int age-3) {9 if (age < 0) {if (age < 0)
8Validation validateAge(int age) {9 if (age-3 < 0) {10 return {false, 1};11 }result ← (empty)
21 Validation result→ (empty) = validateAge(age-3);2223 std::cout << "age=" << age-3 << std::endl;24 std::cout << "ok=" << result(empty).ok << std::endl;25 std::cout << "code=" << result(empty).code << std::endl;26 return 0;27}outputage=-3 ok=0 code=1
age ← 21
18int main() {19 int age→ 21 = 21;2021 Validation result = validateAge(age21);Validation validateAge(int age)
8Validation validateAge(int age21) {9 if (age < 0) {10 return {false, 1};11 }12 if (age < 18) {13 return {false, 2};14 }15 return {true, 0};16}result ← (empty)
21 Validation result→ (empty) = validateAge(age21);2223 std::cout << "age=" << age21 << std::endl;24 std::cout << "ok=" << result(empty).ok << std::endl;25 std::cout << "code=" << result(empty).code << std::endl;26 return 0;27}outputage=21 ok=1 code=0