File tree Expand file tree Collapse file tree 6 files changed +83
-0
lines changed
Expand file tree Collapse file tree 6 files changed +83
-0
lines changed Original file line number Diff line number Diff line change 1+ #include " engine.h"
2+
3+ namespace vehicles {
4+
5+ struct vehicle ;
6+
7+ struct car_specs {
8+ int power () const { return 100 ; }
9+ };
10+
11+ } // namespace vehicles
12+
13+ namespace engine {
14+ namespace {
15+
16+ template <>
17+ struct specs <vehicles::vehicle> : vehicles::car_specs {};
18+
19+ } // namespace
20+ } // namespace engine
21+
22+ int car_power () { return engine::power<vehicles::vehicle>(); }
Original file line number Diff line number Diff line change 1+ cl car.cc truck.cc vehicle_specs.cc /Fe" show.exe"
2+ .\show
3+ cl truck.cc car.cc vehicle_specs.cc /Fe" show.exe"
4+ .\show
Original file line number Diff line number Diff line change 1+ set -e
2+ set -x
3+ clang++ -std=c++11 car.cc truck.cc vehicle_specs.cc && ./a.out
4+ clang++ -std=c++11 truck.cc car.cc vehicle_specs.cc && ./a.out
5+ rm a.out
Original file line number Diff line number Diff line change 1+ #pragma once
2+
3+ namespace engine {
4+ namespace {
5+
6+ template <typename T>
7+ struct specs {
8+ int power () const { return 0 ; }
9+ };
10+
11+ template <typename T>
12+ using make_specs = specs<T>;
13+
14+ template <typename T>
15+ int power () {
16+ return make_specs<T>().power ();
17+ }
18+
19+ } // namespace
20+ } // namespace engine
Original file line number Diff line number Diff line change 1+ #include " engine.h"
2+
3+ namespace vehicles {
4+
5+ struct vehicle ;
6+
7+ struct truck_specs {
8+ int power () const { return 300 ; }
9+ };
10+
11+ } // namespace vehicles
12+
13+ namespace engine {
14+ namespace {
15+
16+ template <>
17+ struct specs <vehicles::vehicle> : vehicles::truck_specs {};
18+
19+ } // namespace
20+ } // namespace engine
21+
22+ int truck_power () { return engine::power<vehicles::vehicle>(); }
Original file line number Diff line number Diff line change 1+ #include < iostream>
2+
3+ int car_power ();
4+ int truck_power ();
5+
6+ int main () {
7+ std::cout << " car power: " << car_power () << std::endl;
8+ std::cout << " truck power: " << truck_power () << std::endl;
9+ return 0 ;
10+ }
You can’t perform that action at this time.
0 commit comments