ClickHouse/dbms/Common/SharedLibrary.h
Ivan 97f2a2213e
Move all folders inside /dbms one level up (#9974)
* Move some code outside dbms/src folder
* Fix paths
2020-04-02 02:51:21 +03:00

41 lines
817 B
C++

#pragma once
#include <dlfcn.h>
#include <memory>
#include <string>
#include <boost/noncopyable.hpp>
namespace DB
{
/** Allows you to open a dynamic library and get a pointer to a function from it.
*/
class SharedLibrary : private boost::noncopyable
{
public:
explicit SharedLibrary(const std::string & path, int flags = RTLD_LAZY);
~SharedLibrary();
template <typename Func>
Func get(const std::string & name)
{
return reinterpret_cast<Func>(getImpl(name));
}
template <typename Func>
Func tryGet(const std::string & name)
{
return reinterpret_cast<Func>(getImpl(name, true));
}
private:
void * getImpl(const std::string & name, bool no_throw = false);
void * handle = nullptr;
};
using SharedLibraryPtr = std::shared_ptr<SharedLibrary>;
}