Skip to content

Instantly share code, notes, and snippets.

@masfj
Last active December 12, 2015 03:39
Show Gist options
  • Save masfj/1150b347999880ef504f to your computer and use it in GitHub Desktop.
Save masfj/1150b347999880ef504f to your computer and use it in GitHub Desktop.
愚直に書くと発狂しそうになるシリーズ
std::unique_ptr<std::remove_pointer<CFURLRef>::type, decltype(&CFRelease)> file(CFURLCreateFromFileSystemRepresentation(nullptr,
                                                                                                                        reinterpret_cast<const unsigned char*>(filename.c_str()),
                                                                                                                        filename.length(),
                                                                                                                        false),
                                                                                CFRelease);
std::unique_ptr<std::remove_pointer<decltype(CFURLCreateFromFileSystemRepresentation(std::declval<CFAllocatorRef>(), std::declval<const unsigned char*>(), std::declval<CFIndex>(), std::declval<bool>()))>::type, decltype(&CFRelease)> file{CFURLCreateFromFileSystemRepresentation(nullptr,
                                                                                                                                                                                                                                                                                      reinterpret_cast<const unsigned char*>(filename.c_str()),
                                                                                                                                                                                                                                                                                      filename.length(),
                                                                                                                                                                                                                                                                                      false),
                                                                                                                                                                                                                                              CFRelease};
@masfj
Copy link
Author

masfj commented Dec 12, 2015

struct deleter
{
  using pointer = decltype(CFURLCreateFromFileSystemRepresentation(std::declval<CFAllocatorRef>(),
                                                                   std::declval<const unsigned char*>(),
                                                                   std::declval<CFIndex>(),
                                                                   std::declval<bool>()));
  void
  operator()(pointer obj)
  {
    CFRelease(obj);
  }
}; // struct deleter

std::unique_ptr<deleter::pointer, deleter> file{CFURLCreateFromFileSystemRepresentation(nullptr,
                                                                                        reinterpret_cast<const unsigned char*>(filename.c_str()),
                                                                                        filename.length(),
                                                                                        false),
                                                deleter{}};

@masfj
Copy link
Author

masfj commented Dec 12, 2015

1statementでがんばろうとしてはいけない

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment