Skip to content

duanegoodner/concepts-using-concepts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

concept-using-concept

Demonstration of how one C++20 Concept can depend on another C++20 Concept

Background

C++20 Concepts provide a way to define constraints on template parameters, enabling better compile-time checking and more readable error messages.

Description

This project briefly demonstrates how one Concept (DataProcessorConcept) can depend on another. The following classes, Concepts and templates are used:

SimpleData

  • Concrete data container type that other classes retrieve and operate on.

DataRetrieverConcept

  • Concept requiring a GetData() method that returns a SimpleData object.

DataProcessorConcept

  • Concept requiring a ProcessData(std::shared_ptr<DataRetrieverConcept>) method that returns a SimpleData object.

Two Concrete Classes that Comply with DataRetrieverConcept

  • TwoRetriever
  • FourRetriever

Two Class Templates that Comply with DataProcessorConcept

  • MultiplyByTwoProcessor
  • DivideByTwoProcessor

Function Template void demonstrate<P>()

  • Compile-time static_assert requires P to comply with DataProcessorConcept

Building

git clone https://gist.github.com/8239a11398d5ec356730a192516d785f.git concepts-example
cd concepts-example
mkdir build
cmake -B build
cmake --build build

Note

To enable verbose Concepts-related compiler error messages, replace:
cmake -B build
with:
cmake -B build -DENABLE_CONCEPT_ERROR_DETAIL=ON.

Running

./build/bin/concept_using_concept

Calls to demonstrate<P>() and their expected outputs:

demonstrate<MultiplyByTwoProcessor<TwoRetriever>>()   →  2 x 2 = 4
demonstrate<DivideByTwoProcessor<TwoRetriever>>()     →  2 / 2 = 1
demonstrate<MultiplyByTwoProcessor<FourRetriever>>()  →  4 x 2 = 8
demonstrate<DivideByTwoProcessor<FourRetriever>>()    →  4 / 2 = 2

About

Demonstration of how one C++20 Concept can depend on another C++20 Concept

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors