[Development] std::chrono getters in our API

Thiago Macieira thiago.macieira at intel.com
Fri Jun 10 19:53:00 CEST 2016


I've added a set of std::chrono API to QTimer[1] and QDeadlineTimer[2] and 
we're hitting a snag on what to name the getters. The setters are fine because 
they're just overloads:

	timer.setInterval(3);		// Qt; milliseconds
	timer.setInterval(3ms);
	deadline.setRemainingTime(3600000); 	// milliseconds
	deadline.setRemainingTime(1h);
	deadline.setDeadline(QDeadlineTimer::current().deadline() + 3600000);
	deadline.setDeadline(std::chrono::steady_clock::now() + 1h);

The problem are the getters: what do we call them? We can't overload on return 
value, so we can't use the standard getter name matching the setters above, as 
it's already used for the Qt-style API:

	int r = timer.remainingTime();		// milliseconds

I implemented an overload by way of templates:

	auto r = timer.remainingTime<std::chrono::seconds>();

But some reviewers didn't like it and want the function to be non-template, 
returning std::chrono::milliseconds, leaving the conversion to a different 
type left as an exercise to the user.

So: what do we do?

Option 1:
- Use overload-by-template like I did
- Cons:
	requires a template argument
- Pros:
	avoids ugly 
std::chrono::duration_cast<std::chrono::seconds>(timer.remainingTime());

Option 2:
- Find a different name, not matching the setter name
- Cons:
	doesn't match setter name
- Pros:
	non-template

Option 3:
- Find a different name for both setters and getters
- Cons:
	can't write
		deadline.setRemainingTime(250ms);
- Pros:
	clean API, but with some surprise factor

Option 4:
- Find a different name for setters and getters, plus overload setters
- Cons:
	a lot more template code in qtimer.h and qdeadlinetimer.h
- Pros:
	clean API, but with some surprise factor

Option 5:
- Drop std::chrono API
- Cons:
	no QTimer::singleShot(5s, ...);
- Pros:
	easiest

NON Option:
- Use std::chrono only
- Why:
	can't depend on it as the only way to access the time. Not to mention that 
	QTimer already has ABI set.

[1] https://codereview.qt-project.org/160889
[2] https://codereview.qt-project.org/159932
-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center




More information about the Development mailing list