18
votes
Accepted
Min function accepting varying number of arguments in C++17
template <typename Less, typename T, typename... Ts>
constexpr const T& min(Less less, const T& a, const T& b, const Ts&... rems) {
This ...
14
votes
Accepted
Implementation of std::any
Your implementation is excellent! I can hardly find any problems. I was amazed how simple a conforming implementation of any can be. And I wholeheartedly agree with ...
12
votes
Min function accepting varying number of arguments in C++17
This looks nice! Two issues I see here,
When compiling your template with clang, it refuses the if constexpr dispatch for every ...
11
votes
Accepted
C++17 : Typelist manipulation
Overall, your code looks very good.
No need to overload for empty template parameter packs
A typename... parameter pack also matches zero elements, so the following ...
10
votes
The real std::apply
I think there are two flaws with this function; the first is in conception, and the second is in implementation.
The conception problem is this: What does ...
10
votes
FlagSet with C++ templates
IndexOf can probably be a nested type of FlagSet, unless you intend for that to be part of the public interface.
...
9
votes
Min function accepting varying number of arguments in C++17
It works well, according to my simple test program:
#include <functional>
int main()
{
return min(std::less<int>(), 2, 0, 3);
}
I suggest that when ...
8
votes
Accepted
8
votes
Accepted
`printf` improvement with C++ variadic templates
General design
Currently, your function is defined to have "undefined behavior" if the number of arguments is wrong. This is sub-optimal. Checking is trivial in this case, so report the problem in ...
8
votes
c++17 compatible std::bind_front alternative
Are there some cases in std::bind_front that I missed?
There are several significant differences between std::bind_front's ...
8
votes
Accepted
How to simplify this C++ CRTP example?
Avoid special cases
A lot of problems come from the fact that you have slightly different ways to construct a 2D point and to get its elements than you have for an arbitrary dimensional point. You ...
8
votes
Accepted
Generic test case templates
C++ 17
Why limit yourself to C functions?
DynamicTest(OutputType (*testfunc)(InputType), OutputType (*trustedfunc)(InputType))
I would declare this as:
...
8
votes
Accepted
De-/Serialization of structs representing TCP messages
Your code produces no memory leaks since you're not manually allocating and deleting memory.
Include all headers
Always include all the headers. In this case, you need ...
7
votes
Accepted
Generic matrix type in C++
Use one vector instead of two vectors
You can improve performance by using one vector instead of two vectors; you can calculate the 2nd dimension using a little math. This is actually how primitive ...
7
votes
The perfect function alias
Is there a situation where the compiler will not optimize away the wrapper because the wrapper and the original function have different semantics?
Yes to the first part and no to the second. Any ...
7
votes
Accepted
Meta functions for sequences of exponents of 2
Certainly your definitions of printing_type and print could be shortened. You're currently doing
...
7
votes
De-/Serialization of structs representing TCP messages
Here are some things that may help you improve your program.
Use all required #includes
Part of the interface is the #include ...
7
votes
Accepted
Object to ignore unused function output parameters
What's wrong with just writing:
int main()
{
X ignore;
foo(ignore);
return 0;
}
What benefit is gained by adding a wrapper around the unused argument?
...
7
votes
Accepted
Member detection within a class
Pre C++20 concepts
I know you are using C++20 (as everyone should; C++23 is the current version, and C++26 already has its first major features), but just for completeness I thought I’d give a pre-C++...
6
votes
Selection sorting a type list (compile-time)
I recommend a naming style that uses CamelCase for template parameters and snake_case (only) for plain old variables and ...
6
votes
Accepted
Selecting function overload based on a type match with return value of passed callable
Higher level overview:
Personally I think the architecture has limited use cases. It was quite hard to implement, and even then doesn't match the specification.
From what I understood, this is the ...
6
votes
Accepted
Set an order or precedence when calling functions that may or may not exist
Not a full review, just an answer on the SFINAE-mechanisms part:
I'd say that your method is perfectly idiomatic. I recommend an approach exactly isomorphic to yours, based on some code I originally ...
6
votes
Accepted
Event handling attempt using some of the c++ 17 features
I'm actually not the right person to properly review your code, since event handling is outside my particular experience, so the overall idea of even having this kind of observer-handler-emitter ...
6
votes
Accepted
6
votes
Accepted
An overloaded random number function template using modern C++
The constructor of uniform_int_distribution has default arguments:
...
6
votes
Accepted
Transaction manager, supporting undo/redo, using C++ templates
If you want to implement the command manager pattern, you can do something so very much simpler that I don't really understand what you're aiming for.
As you know, the design pattern has a ...
6
votes
Accepted
Finding the common iterator category in C++
If you have a typelist of iterator tag types, then std::common_type will find the common base type.
...
6
votes
Accepted
C++17 <span> implementation
Well, it looks quite nice. But now let's try to find all the corners which can still be improved:
I'm not quite sure why you list a few members of each include you added. But, at least it simplifies ...
6
votes
Accepted
Implementing apply_each for tuple c++
I see two main issues with the design.
That you need to use std::ref to operate on the tuples themselves and not their copies. This isn't good. It is used this way ...
Only top scored, non community-wiki answers of a minimum length are eligible
Related Tags
template-meta-programming × 274c++ × 269
c++11 × 63
c++17 × 58
c++14 × 43
template × 28
variadic × 23
c++20 × 16
performance × 11
reinventing-the-wheel × 11
variant-type × 9
design-patterns × 7
functional-programming × 7
object-oriented × 6
mathematics × 6
type-safety × 6
array × 5
iterator × 5
library × 5
serialization × 5
beginner × 4
collections × 4
logging × 4
inheritance × 4
boost × 4