プロジェクト実践

実践的なC++プロジェクト構築.

プロジェクト構成

project/
├── src/
│   ├── main.cpp
│   ├── utils.hpp
│   └── utils.cpp
├── include/
│   └── utils.hpp
├── CMakeLists.txt
└── README.md

実装例:電卓アプリ

// utils.hpp
#pragma once
#include <string>

class Calculator {
public:
    double calculate(const std::string& expression);
private:
    double parseExpression(const std::string& expr);
};

// utils.cpp
#include "utils.hpp"
#include <iostream>

double Calculator::calculate(const std::string& expression) {
    return parseExpression(expression);
}

double Calculator::parseExpression(const std::string& expr) {
    return 0.0;  // 簡略版
}

// main.cpp
#include "utils.hpp"
#include <iostream>

int main() {
    Calculator calc;
    std::string expr = "5 + 3";
    std::cout << calc.calculate(expr) << std::endl;
    return 0;
}

CMakeLists.txt サンプル

cmake_minimum_required(VERSION 3.10)
project(Calculator)

set(CMAKE_CXX_STANDARD 17)

add_executable(calc
    src/main.cpp
    src/utils.cpp
)

target_include_directories(calc PRIVATE include)

コンパイル:
mkdir build && cd build && cmake .. && make

テスト駆動開発

#include <iostream>
#include <cassert>

int add(int a, int b) { return a + b; }
bool isEven(int n) { return n % 2 == 0; }

void runTests() {
    // テスト1
    assert(add(2, 3) == 5);
    
    // テスト2
    assert(isEven(4) == true);
    assert(isEven(3) == false);
    
    std::cout << "全てのテストが成功" << std::endl;
}

int main() {
    runTests();
    return 0;
}

全てのテストが成功

ポイント

  • 適切なプロジェクト構成
  • CMake で構築自動化
  • テスト駆動開発